<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
    <title>フルスタックLinuxプログラミング</title>
    <subtitle>フロントエンドからインフラまでできるエンジニアへ</subtitle>
    <link rel="self" type="application/atom+xml" href="https://reisuta.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://reisuta.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-01T00:00:00+00:00</updated>
    <id>https://reisuta.com/atom.xml</id>
    <entry xml:lang="ja">
        <title>【2025年最新版】おすすめ技術書や買ってよかったもの24選</title>
        <published>2025-01-16T00:00:00+00:00</published>
        <updated>2025-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/technical-book-2024/"/>
        <id>https://reisuta.com/technical-book-2024/</id>
        
        <content type="html" xml:base="https://reisuta.com/technical-book-2024/">&lt;p&gt;本記事では、私が今年(2024年)に読んだ技術書や&lt;br &#x2F;&gt;
買ってよかった本やものなどの中で、&lt;br &#x2F;&gt;
これは良かったなっていうやつを紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;技術書はもちろん、金融、ビジネス書や、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ガジェットまで幅広く紹介させていただきます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;金融というと、エンジニアリングに関係ないようにも思えますが、&lt;br &#x2F;&gt;
例えば仮想通貨などはブロックチェーンを使用していますし、&lt;br &#x2F;&gt;
株式投資などはバックエンドの処理として複雑度が高いなど、&lt;br &#x2F;&gt;
金融のエンジニアリングは高度なことがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、それらのドメイン知識として&lt;br &#x2F;&gt;
金融の知識を身につけるのは、&lt;br &#x2F;&gt;
個人的にはありかなと思っているので、&lt;br &#x2F;&gt;
それらも紹介しようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、シンプルな技術書だけのおすすめであれば、&lt;br &#x2F;&gt;
すでに2記事を過去に公開していますので、&lt;br &#x2F;&gt;
よろしければこちらもご参考ください&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;&quot;&gt;技術書マニア厳選の26冊&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book-2023&#x2F;&quot;&gt;2023年に読んだおすすめ18冊&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-shu-shu-xi&quot;&gt;技術書系&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kodeinguwozhi-eruji-shu&quot;&gt;コーディングを支える技術&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774156545.jpg&quot; alt=&quot;コーディングを支える技術 ～成り立ちから学ぶプログラミング作法 （WEB＋DB　press　plusシリーズ） [ 西尾泰和 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;コーディングを支える技術 ～成り立ちから学ぶプログラミング作法 （WEB＋DB　press　plusシリーズ） [ 西尾泰和 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93%20%EF%BD%9E%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A1%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E4%BD%9C%E6%B3%95%20%EF%BC%88WEB%EF%BC%8BDB%E3%80%80press%E3%80%80plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%89%20%5B%20%E8%A5%BF%E5%B0%BE%E6%B3%B0%E5%92%8C%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;12272396&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、所謂プログラミングお作法系のジャンルの本ではありますが、&lt;br &#x2F;&gt;
その中でも&lt;mark&gt;プログラミングの歴史や、文法の誕生の経緯&lt;&#x2F;mark&gt;などについても&lt;br &#x2F;&gt;
触れており、実務というよりはやや学術的な部分も多い印象でした。&lt;&#x2F;p&gt;
&lt;p&gt;if ~ elseやwhileが存在する意味、ifの必要性などといった、&lt;br &#x2F;&gt;
今となっては当たり前のことを熟考している本ではあるので、&lt;br &#x2F;&gt;
読み物としてとても面白いです。&lt;&#x2F;p&gt;
&lt;p&gt;後半になるにつれて、そこそこ難しくなるので、&lt;br &#x2F;&gt;
プログラミングお作法系の一冊目の本としてはおすすめできないですが、&lt;br &#x2F;&gt;
&lt;mark&gt;リーダブルコードのような定番書籍をすでに読んでおり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;プログラミング言語を3つ以上勉強したことがある方であれば&lt;&#x2F;mark&gt;、&lt;br &#x2F;&gt;
本書の内容はプログラミングやコーディングということについて&lt;br &#x2F;&gt;
更に深みを与えてくれると思うのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;プログラミング中級者以上&lt;&#x2F;li&gt;
&lt;li&gt;プログラミングをアカデミックに学びたい方&lt;&#x2F;li&gt;
&lt;li&gt;歴史や成り立ちに興味がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB07JKLS4KM&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;コーディングを支える技術――成り立ちから学ぶプログラミング作法 WEB+DB PRESS plus&lt;&#x2F;a&gt;
&lt;h3 id=&quot;webhurontoendohaipahuomansutiyuningu&quot;&gt;Webフロントエンドハイパフォーマンスチューニング&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;bk4774189677.jpg&quot; alt=&quot;Webフロントエンドハイパフォーマンスチューニング Webサイト・アプリケーションを徹底的に高速化／久保田光則【1000円以上送料無料】&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Webフロントエンドハイパフォーマンスチューニング Webサイト・アプリケーションを徹底的に高速化／久保田光則【1000円以上送料無料】&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Web%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%20Web%E3%82%B5%E3%82%A4%E3%83%88%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%BE%B9%E5%BA%95%E7%9A%84%E3%81%AB%E9%AB%98%E9%80%9F%E5%8C%96%EF%BC%8F%E4%B9%85%E4%BF%9D%E7%94%B0%E5%85%89%E5%89%87%E3%80%901000%E5%86%86%E4%BB%A5%E4%B8%8A%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%E3%80%91&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;bookfan&amp;#x2F;bk-4774189677&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は隠れた良書で、&lt;br &#x2F;&gt;
本自体はやや古めではありますが、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;かなり深くまでフロントエンド技術、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;Web系についてまで解説されています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ブラウザのレンダリングの仕組みや、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;CSS読み込みのパフォーマンス、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;JavaScriptのパフォーマンス測定API&lt;&#x2F;mark&gt;など、&lt;br &#x2F;&gt;
どれも実務向けのトピックで参考になる部分が非常に多かったのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;内容的には高度な部類になりますので、&lt;br &#x2F;&gt;
この本を読む場合、基本的なJavaScriptは理解しておいた方が良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;フロントエンドのパフォーマンスチューニングに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;ブラウザの仕組みやWeb全般の技術に詳しくなりたい人&lt;&#x2F;li&gt;
&lt;li&gt;JavaScriptをある程度理解している人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0728K5JZV&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Webフロントエンド ハイパフォーマンス チューニング&lt;&#x2F;a&gt;
&lt;h3 id=&quot;sheng-cheng-aishi-dai-noxin-puroguramingushi-jian-gaido&quot;&gt;生成AI時代の新プログラミング実践ガイド&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;生成AI時代の新プログラミング実践ガイド Pythonで学ぶGPTとCopilotの活用ベストプラクティス [ 松本 直樹 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E7%94%9F%E6%88%90AI%E6%99%82%E4%BB%A3%E3%81%AE%E6%96%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20Python%E3%81%A7%E5%AD%A6%E3%81%B6GPT%E3%81%A8Copilot%E3%81%AE%E6%B4%BB%E7%94%A8%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9%20%5B%20%E6%9D%BE%E6%9C%AC%20%E7%9B%B4%E6%A8%B9%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17725382&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、最近何かと熱いAI周り、&lt;br &#x2F;&gt;
プロンプトエンジニアリングについての本です。&lt;&#x2F;p&gt;
&lt;p&gt;いつの間にか、開発のお供になっている、&lt;br &#x2F;&gt;
ChatGPTですが、その使い方について、&lt;br &#x2F;&gt;
提案をしてくれる本です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;GPTなどを用いて、要件定義から設計を行い、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;簡単なWebサイトを作る例は非常に参考になります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GPTの出力情報が足りない場合は逆質問させたりするなど、&lt;br &#x2F;&gt;
プロンプトエンジニアリングのテクニックが学べるのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPTを普段から使っている人&lt;&#x2F;li&gt;
&lt;li&gt;ChatGPTのパワーをもっとフル活用したいと思っている人&lt;&#x2F;li&gt;
&lt;li&gt;生成AIが好きな人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CTT8QKHR&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;生成AI時代の新プログラミング実践ガイド Pythonで学ぶGPTとCopilotの活用ベストプラクティス&lt;&#x2F;a&gt;
&lt;h3 id=&quot;shi-wu-deshi-erumeruji-shu-nojiao-ke-shu&quot;&gt;実務で使えるメール技術の教科書&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798183930_1_142.jpg&quot; alt=&quot;実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策まで [ 増井 敏克 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策まで [ 増井 敏克 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%AE%9F%E5%8B%99%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%20%E3%83%A1%E3%83%BC%E3%83%AB%E6%8A%80%E8%A1%93%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%20%E5%9F%BA%E6%9C%AC%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%E3%81%8B%E3%82%89%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89%E3%83%BB%E9%80%81%E4%BF%A1%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E8%AA%8D%E8%A8%BC%E3%83%BB%E6%B7%BB%E4%BB%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%BB%E6%9A%97%E5%8F%B7%E5%8C%96%E3%83%BB%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%AF%BE%E7%AD%96%E3%81%BE%E3%81%A7%20%5B%20%E5%A2%97%E4%BA%95%20%E6%95%8F%E5%85%8B%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17735020&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は割と新しい本なのですが、&lt;br &#x2F;&gt;
それでいて内容はメール技術という、&lt;br &#x2F;&gt;
硬派なもので、なんともギャップ萌えです。&lt;&#x2F;p&gt;
&lt;p&gt;普段から何気なく使っているけど、&lt;br &#x2F;&gt;
意外と仕組みがあんまわかっていない、&lt;br &#x2F;&gt;
メールについて本書は取り上げています。&lt;&#x2F;p&gt;
&lt;p&gt;ビジネス書的なメール作法みたいな本は山程ありますが、&lt;br &#x2F;&gt;
&lt;mark&gt;きちんとエンジニアリングの文脈で、メールに特化して&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;telnetなどのコマンドでメールを受信したり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;POPサーバーなどの構築方法などを解説している本は&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そんなに多くないと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、中身も非常に濃く、&lt;br &#x2F;&gt;
ある程度のネットワークの知識、&lt;br &#x2F;&gt;
Linuxサーバー構築の知識などがないと、&lt;br &#x2F;&gt;
難しい部分も多い印象でした。&lt;&#x2F;p&gt;
&lt;p&gt;特に私も含めて、20代ぐらいのエンジニアは、&lt;br &#x2F;&gt;
このあたりの知識が弱い人が多いと思うので(世代的に触れる機会が少ないため)、&lt;br &#x2F;&gt;
必須教養のためにもぜひとも読みたい一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;メール技術に特化して学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;基礎的なネットワークとLinuxの知識がある人&lt;&#x2F;li&gt;
&lt;li&gt;メールサーバー構築やプロトコルなどについて体系的に学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;自分でサーバー構築をしたことがあまりない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CQQ5BGC8&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;実務で使える メール技術の教科書 基本のしくみからプロトコル・サーバー構築・送信ドメイン認証・添付ファイル・暗号化・セキュリティ対策まで&lt;&#x2F;a&gt;
&lt;h3 id=&quot;paketutokiyaputiyanojiao-ke-shu&quot;&gt;パケットキャプチャの教科書&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;bk4797390719.jpg&quot; alt=&quot;パケットキャプチャの教科書／みやたひろし【3000円以上送料無料】&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;パケットキャプチャの教科書／みやたひろし【3000円以上送料無料】&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%EF%BC%8F%E3%81%BF%E3%82%84%E3%81%9F%E3%81%B2%E3%82%8D%E3%81%97%E3%80%903000%E5%86%86%E4%BB%A5%E4%B8%8A%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%E3%80%91&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;booxstore&amp;#x2F;bk-4797390719&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;メールとやや硬派な内容が出たので、&lt;br &#x2F;&gt;
硬派続きで(?)、お次はネットワーク関係です。&lt;&#x2F;p&gt;
&lt;p&gt;この本はネットワークの本としてはかなり有名な本で、&lt;br &#x2F;&gt;
正直めちゃくちゃ今更感あるのですが、&lt;br &#x2F;&gt;
言わずもがな良書なので紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;普段プログラミング言語を使って開発しているエンジニアからすると、&lt;br &#x2F;&gt;
意外と知っているようで知らないのがネットワークかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;だからといって、&lt;strong&gt;知らないでは済まされないほど、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;重要なのがネットワークというもの。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ある程度、経験を積んで来ると、&lt;br &#x2F;&gt;
ネットワークの知識がないと&lt;br &#x2F;&gt;
厳しくなる状況が出てくると思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、この本は本職のネットワークエンジニア向けというよりは、&lt;br &#x2F;&gt;
&lt;mark&gt;開発系のエンジニアが最低限押さえておきたいネットワークの知識が&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;学べる本としてめちゃくちゃおすすめです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;内容的にもそこまで難しいわけではないので、&lt;br &#x2F;&gt;
何らかのエンジニア経験がある人であれば&lt;br &#x2F;&gt;
読み進められると思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ネットワークの基礎を学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;ネットワークの知識がないときついと感じ始めている人&lt;&#x2F;li&gt;
&lt;li&gt;開発エンジニアなどネットワークを専門とはしていないエンジニア&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB076CWFDB8&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;パケットキャプチャの教科書&lt;&#x2F;a&gt;
&lt;h3 id=&quot;pythondedekiru-zhu-jia-detafen-xi&quot;&gt;Pythonでできる 株価データ分析&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Pythonでできる！ 株価データ分析 [ 片渕彼富 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Python%E3%81%A7%E3%81%A7%E3%81%8D%E3%82%8B%EF%BC%81%20%E6%A0%AA%E4%BE%A1%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%20%5B%20%E7%89%87%E6%B8%95%E5%BD%BC%E5%AF%8C%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17367547&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次は少し毛色が変わりますが、&lt;br &#x2F;&gt;
データ分析の本です。&lt;&#x2F;p&gt;
&lt;p&gt;最近は、Fintechが何かと熱いですが、&lt;br &#x2F;&gt;
それを象徴するような一冊で、&lt;br &#x2F;&gt;
株価分析とPythonという面白い組み合わせが、&lt;br &#x2F;&gt;
目を引く一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;株価なんてプログラミングと全然関係ないと思われがちですが、&lt;br &#x2F;&gt;
Fintech系の企業を受けたりすると、&lt;br &#x2F;&gt;
コーディング試験でローソク足がでてきて、&lt;br &#x2F;&gt;
範囲内のものを取得しなさいみたいな問題も出てくるので、&lt;br &#x2F;&gt;
意外と侮れません。(もちろんFintech系の企業の話ではありますが)&lt;&#x2F;p&gt;
&lt;p&gt;この本を読み進めながら、&lt;br &#x2F;&gt;
株のドメイン知識も多少は身につけることができるので、&lt;br &#x2F;&gt;
&lt;strong&gt;Fintech系の企業に興味がある人にはぜひとも読んでほしい一冊です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ベースはデータ分析の本なので、&lt;br &#x2F;&gt;
開発の本というわけではないので、&lt;br &#x2F;&gt;
すべてのエンジニアにおすすめというわけではありませんが、&lt;br &#x2F;&gt;
内容が尖っているので、刺さる人には刺さる一冊かと思います&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Fintech系企業志望のエンジニア&lt;&#x2F;li&gt;
&lt;li&gt;株とプログラミングをあわせて理解したい人&lt;&#x2F;li&gt;
&lt;li&gt;データ分析に興味がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F462785711X&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Pythonでできる！ 株価データ分析&lt;&#x2F;a&gt;
&lt;h3 id=&quot;fluttershi-jian-kai-fa&quot;&gt;Flutter実践開発&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;bk4297139936.jpg&quot; alt=&quot;Flutter実践開発 iPhone&amp;#x2F;Android両対応アプリ開発のテクニック／渡部陽太【3000円以上送料無料】&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Flutter実践開発 iPhone&amp;#x2F;Android両対応アプリ開発のテクニック／渡部陽太【3000円以上送料無料】&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Flutter%E5%AE%9F%E8%B7%B5%E9%96%8B%E7%99%BA%20iPhone%2FAndroid%E4%B8%A1%E5%AF%BE%E5%BF%9C%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%EF%BC%8F%E6%B8%A1%E9%83%A8%E9%99%BD%E5%A4%AA%E3%80%903000%E5%86%86%E4%BB%A5%E4%B8%8A%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%E3%80%91&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;booxstore&amp;#x2F;bk-4297139936&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;ジャンルが変わるのですが、&lt;br &#x2F;&gt;
Flutterの本です。&lt;&#x2F;p&gt;
&lt;p&gt;Flutterの本は、&lt;br &#x2F;&gt;
そんなに種類があるわけではないので、&lt;br &#x2F;&gt;
結構貴重なのですが、&lt;br &#x2F;&gt;
本書はその中でも、&lt;br &#x2F;&gt;
&lt;strong&gt;Flutterについてより実践的に解説しており&lt;&#x2F;strong&gt;、&lt;br &#x2F;&gt;
いきなりFlutterのプロジェクトに放り込まれて&lt;br &#x2F;&gt;
途方に暮れているエンジニア、垂涎の一冊だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Dartの文法についても多少は触れているので、&lt;br &#x2F;&gt;
この一冊だけでも消化できれば、&lt;br &#x2F;&gt;
Flutterの知識は十分つくと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Webのフロントエンドやバックエンドを主にやってきた人にとって&lt;br &#x2F;&gt;
モバイル系のプログラミングは、何かと毛色が異なることが多くて、&lt;br &#x2F;&gt;
もしかすると最初の一冊でこの本はやや難しいかもしれないので、&lt;br &#x2F;&gt;
その場合はUdemyなどで優しめの講座を受講してからの方が良いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;その際、下記の講座などはわかりやすかったので、&lt;br &#x2F;&gt;
おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;Flutterアプリ開発講座(初級編)&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CVLF45NS&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Flutter実践開発 ── iPhone／Android両対応アプリ開発のテクニック WEB+DB PRESS plus&lt;&#x2F;a&gt;
&lt;p&gt;また私もFlutterではないですが、&lt;br &#x2F;&gt;
&lt;strong&gt;VimとRuby、Nuxt.jsについては&lt;br &#x2F;&gt;
Udemyで講座を紹介していますので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;今すぐ学ぶ. 学習を継続してトップを目指そう。Udemyの対象のオンラインコースが最大90%OFF！&lt;&#x2F;p&gt;
&lt;p&gt;【Ruby基礎】Rubyの基本的な文法を本講座一本でマスター、メタプログラミングやProcなどの応用まで&lt;&#x2F;p&gt;
&lt;p&gt;【Vim&#x2F;Neovim + Tmux + iTerm2】基礎からじっくり解説。初心者から中級者以上まで&lt;&#x2F;p&gt;
&lt;p&gt;【Nuxt3基礎】Nuxt3の基本的な使い方やディレクトリ構造を身につける Nuxt4の導入まで&lt;&#x2F;p&gt;
&lt;h3 id=&quot;puroguramingutypescript&quot;&gt;プログラミングTypeScript&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;bk4873119049.jpg&quot; alt=&quot;プログラミングTypeScript スケールするJavaScriptアプリケーション開発／BorisCherny／今村謙士／原隆文【3000円以上送料無料】&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プログラミングTypeScript スケールするJavaScriptアプリケーション開発／BorisCherny／今村謙士／原隆文【3000円以上送料無料】&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0TypeScript%20%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8BJavaScript%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%EF%BC%8FBorisCherny%EF%BC%8F%E4%BB%8A%E6%9D%91%E8%AC%99%E5%A3%AB%EF%BC%8F%E5%8E%9F%E9%9A%86%E6%96%87%E3%80%903000%E5%86%86%E4%BB%A5%E4%B8%8A%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%E3%80%91&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;booxstore&amp;#x2F;bk-4873119049&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次はTypeScriptの本です。&lt;&#x2F;p&gt;
&lt;p&gt;これは言わずもがなのO&#x27;Reillyの本なので、&lt;br &#x2F;&gt;
まあ定番ですよね。&lt;&#x2F;p&gt;
&lt;p&gt;ある程度のJavaScriptの知識が必要にはなると思いますが、&lt;br &#x2F;&gt;
&lt;strong&gt;TypeScriptの特徴を学ぶうえで有用だと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの本は、以前&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;#%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AETypeScript%E5%85%A5%E9%96%80_%E5%AE%89%E5%85%A8%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%8B%E3%82%89%E9%AB%98%E5%BA%A6%E3%81%AA%E5%9E%8B%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%BE%E3%81%A7&quot;&gt;下記の記事&lt;&#x2F;a&gt;で紹介した、&lt;br &#x2F;&gt;
ベリー本も良書なため、個人的には最初は&lt;br &#x2F;&gt;
どちらか一冊を読むだけでも十分だとは思いますが、&lt;br &#x2F;&gt;
よりTypeScriptを極めたい方は2冊とも読むことをおすすめします。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;JavaScriptからTypeScriptにシフトしたい人&lt;&#x2F;li&gt;
&lt;li&gt;TypeScriptの基礎を学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;O&#x27;Reillyが好きな人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873119049&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発&lt;&#x2F;a&gt;
&lt;h3 id=&quot;yan-zuan-rubypuroguramingu&quot;&gt;研鑽Rubyプログラミング&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;4908686173.jpg&quot; alt=&quot;研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフ&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフ&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E7%A0%94%E9%91%BDRuby%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%8E%9F%E5%89%87%E3%81%A8%E3%83%88%E3%83%AC%E3%83%BC%E3%83%89%E3%82%AA%E3%83%95&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;booksdream&amp;#x2F;1-241002346069&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本はRuby系の本の中ではわりかし最近な部類だとは思うのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;ずばりかなり上級者向けの本です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;研鑽というタイトルからも察しがつきますが、&lt;br &#x2F;&gt;
内容的にもRubyの細かい文法や機能について&lt;br &#x2F;&gt;
触れており、Rubyの知識がある程度ないと&lt;br &#x2F;&gt;
太刀打ちできないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、それだけ読み応えがある分、&lt;br &#x2F;&gt;
非常に勉強になるところが多く、&lt;br &#x2F;&gt;
Rubyのコードをもっと良くするために&lt;br &#x2F;&gt;
どういうアプローチがあるのかなど、&lt;br &#x2F;&gt;
非常に引き出しが増えると思います。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの本は、以前紹介した、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;#%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Ruby&quot;&gt;メタプログラミングRuby&lt;&#x2F;a&gt;や&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89_Ruby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&quot;&gt;オブジェクト指向設計実践ガイド&lt;&#x2F;a&gt;など、&lt;br &#x2F;&gt;
上級者向けの本が多いですが、この本もこれらと同じく、&lt;br &#x2F;&gt;
&lt;mark&gt;Rubyをもっと極めたい方向けの本という印象です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;メタプログラミングRubyもすでに読んでいて、&lt;br &#x2F;&gt;
もっとRubyを研鑽したい中級以上のRubyエンジニアに&lt;br &#x2F;&gt;
おすすめしたい一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ruby中級者以上&lt;&#x2F;li&gt;
&lt;li&gt;Rubyをもっと極めたい&lt;&#x2F;li&gt;
&lt;li&gt;メタプログラミングなどについてある程度知っている&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4908686173&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;研鑽Rubyプログラミング 実践的なコードのための原則とトレードオフ&lt;&#x2F;a&gt;
&lt;h3 id=&quot;rubynosikumi-ruby-under-a-microscope&quot;&gt;Rubyのしくみ -Ruby Under a Microscope&lt;&#x2F;h3&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4274050653&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Rubyのしくみ -Ruby Under a Microscope-&lt;&#x2F;a&gt;
&lt;p&gt;この本は知る人ぞ知る隠れた名著なのですが、&lt;br &#x2F;&gt;
本の難しさも折り紙付きです。&lt;&#x2F;p&gt;
&lt;p&gt;この本は今だと中古しかなくて、&lt;br &#x2F;&gt;
入手しづらいのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;それでも一度は読んでみる価値がある本です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;日本語版の序文はまつもとゆきひろ氏であるように、&lt;br &#x2F;&gt;
かなりRubyの深奥に触れた本だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Railsなどのフレームワークのコードを日頃から&lt;br &#x2F;&gt;
ある程度読んでいたりといった、&lt;br &#x2F;&gt;
&lt;mark&gt;プログラミングをソースコードレベルで理解したい人向けの本&lt;&#x2F;mark&gt;なので、&lt;br &#x2F;&gt;
対象読者は、実務3年以上のRubyエンジニアとかになると思います。&lt;&#x2F;p&gt;
&lt;p&gt;正直ここまでの知識がなくても&lt;br &#x2F;&gt;
Rubyは書けるので、&lt;br &#x2F;&gt;
万人におすすめできるわけではありませんが、&lt;br &#x2F;&gt;
このようにプログラミングの深奥に触れた本は&lt;br &#x2F;&gt;
類書があまりないのと、読めば間違いなく血肉になるぐらい&lt;br &#x2F;&gt;
珠玉の一冊なので紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rubyを愛している人&lt;&#x2F;li&gt;
&lt;li&gt;Rubyをソースコードレベルで極めにかかりたい人&lt;&#x2F;li&gt;
&lt;li&gt;Rubyの経験が3年以上ある人(の方が望ましい)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;javascript-di-7ban&quot;&gt;JavaScript 第7版&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;すみません、この本は実は前にも&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;#JavaScript_%E7%AC%AC7%E7%89%88&quot;&gt;記事&lt;&#x2F;a&gt;で紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;だけどもう一度紹介させてください。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;それぐらいこの本は素晴らしい一冊です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もう正直JavaScriptは、&lt;br &#x2F;&gt;
この本だけ読めば十分です。&lt;&#x2F;p&gt;
&lt;p&gt;そう言えるぐらい、内容深さ、&lt;br &#x2F;&gt;
実践向き度合いなど、すべてにおいて&lt;br &#x2F;&gt;
完璧な一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、分厚いので&lt;br &#x2F;&gt;
いきなり読むのはハードル高いかもしれませんが、&lt;br &#x2F;&gt;
&lt;strong&gt;JavaScriptを本業にしている方は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;必読の一冊です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptについては、&lt;br &#x2F;&gt;
この本とMDNのドキュメントを使えば、&lt;br &#x2F;&gt;
大半の知識は網羅できると思います。&lt;&#x2F;p&gt;
&lt;p&gt;この本の唯一の弱点は、&lt;br &#x2F;&gt;
分厚くて難しいこと。&lt;&#x2F;p&gt;
&lt;p&gt;なので、JavaScriptについては、&lt;br &#x2F;&gt;
私もYoutubeで動画を出していますので、&lt;br &#x2F;&gt;
この本を読む前の準備運動として視聴いただけると嬉しいです。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;syEu56_kaGI&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873119707&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;JavaScript 第7版&lt;&#x2F;a&gt;
&lt;h2 id=&quot;jin-rong-bizinesushu-xi&quot;&gt;金融・ビジネス書系&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;ji-shu-shu-nodu-shu-shu&quot;&gt;「技術書」の読書術&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798171548_1_138.jpg&quot; alt=&quot;「技術書」の読書術 達人が教える選び方・読み方・情報発信&amp;amp;共有のコツとテクニック [ IPUSIRON ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;「技術書」の読書術 達人が教える選び方・読み方・情報発信&amp;amp;共有のコツとテクニック [ IPUSIRON ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%8C%E6%8A%80%E8%A1%93%E6%9B%B8%E3%80%8D%E3%81%AE%E8%AA%AD%E6%9B%B8%E8%A1%93%20%E9%81%94%E4%BA%BA%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E9%81%B8%E3%81%B3%E6%96%B9%E3%83%BB%E8%AA%AD%E3%81%BF%E6%96%B9%E3%83%BB%E6%83%85%E5%A0%B1%E7%99%BA%E4%BF%A1%26%E5%85%B1%E6%9C%89%E3%81%AE%E3%82%B3%E3%83%84%E3%81%A8%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%20%5B%20IPUSIRON%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17277953&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本も一時期話題になった一冊かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;正直技術書として紹介するかビジネス書として&lt;br &#x2F;&gt;
紹介するか迷いまして、実際結構微妙なのですが、&lt;br &#x2F;&gt;
私はこちらのビジネス書のおすすめとして紹介させていただきます。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、題名にある通り、&lt;br &#x2F;&gt;
確かに技術書の読書術を様々取り上げて入るのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;ベースは読書術の本だったという点が大きいです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただそうはいっても、&lt;br &#x2F;&gt;
ところどころで技術書ならではの特徴や&lt;br &#x2F;&gt;
ITエンジニアならではの読書術なども紹介されているので、&lt;br &#x2F;&gt;
個人的には一度は読んでおきたい本だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;読書術に興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;技術書や本を読むのが好きな人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0BF469YLK&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;「技術書」の読書術 達人が教える選び方・読み方・情報発信&amp;amp;共有のコツとテクニック&lt;&#x2F;a&gt;
&lt;h3 id=&quot;uorujie-norandamu-uoka&quot;&gt;ウォール街のランダム・ウォーカー&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;ウォール街のランダム・ウォーカー＜原著第13版＞ 株式投資の不滅の真理 [ バートン・マルキール ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E8%A1%97%E3%81%AE%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%BB%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%AB%E3%83%BC%EF%BC%9C%E5%8E%9F%E8%91%97%E7%AC%AC13%E7%89%88%EF%BC%9E%20%E6%A0%AA%E5%BC%8F%E6%8A%95%E8%B3%87%E3%81%AE%E4%B8%8D%E6%BB%85%E3%81%AE%E7%9C%9F%E7%90%86%20%5B%20%E3%83%90%E3%83%BC%E3%83%88%E3%83%B3%E3%83%BB%E3%83%9E%E3%83%AB%E3%82%AD%E3%83%BC%E3%83%AB%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17455659&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;言わずとしれた投資本の名著です。&lt;&#x2F;p&gt;
&lt;p&gt;この本は投資をやっていない人であっても、&lt;br &#x2F;&gt;
&lt;strong&gt;金融の知識を学ぶという点では必読の一冊だと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;インデックス投資の強さや合理性などについて、&lt;br &#x2F;&gt;
これほど明確に説明している本もないと思うので、&lt;br &#x2F;&gt;
金融系エンジニアはもちろん、趣味で株式投資をやっている人も&lt;br &#x2F;&gt;
必読の一冊だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;投資をやっている人&lt;&#x2F;li&gt;
&lt;li&gt;金融系のドメイン知識がほしいエンジニア&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0C64J62SB&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;ウォール街のランダム・ウォーカー＜原著第13版＞　株式投資の不滅の真理 (日本経済新聞出版)&lt;&#x2F;a&gt;
&lt;h3 id=&quot;toiresumahode-wu-xian-10bei-zhu-3nian-9kayue-de5975mo-yuan-wojia-idatou-zi&quot;&gt;トイレスマホで「無限10倍株」 3年9カ月で5975万円を稼いだ投資&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000014312762.jpg&quot; alt=&quot;トイレスマホで「無限10倍株」　3年9カ月で5975万円を稼いだ投資術【電子書籍】[ テンバガー投資家X ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;トイレスマホで「無限10倍株」　3年9カ月で5975万円を稼いだ投資術【電子書籍】[ テンバガー投資家X ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%88%E3%82%A4%E3%83%AC%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E3%80%8C%E7%84%A1%E9%99%9010%E5%80%8D%E6%A0%AA%E3%80%8D%E3%80%803%E5%B9%B49%E3%82%AB%E6%9C%88%E3%81%A75975%E4%B8%87%E5%86%86%E3%82%92%E7%A8%BC%E3%81%84%E3%81%A0%E6%8A%95%E8%B3%87%E8%A1%93%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20%E3%83%86%E3%83%B3%E3%83%90%E3%82%AC%E3%83%BC%E6%8A%95%E8%B3%87%E5%AE%B6X%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;d85bb1888dd73334aa0319af2fd01f87&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本はタイトルとは裏腹に、&lt;br &#x2F;&gt;
中身は結構真面目な本で、&lt;br &#x2F;&gt;
個人的には結構参考になったのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ウォール街のランダムウォーカーで推奨されているインデックス投資とは異なり、&lt;br &#x2F;&gt;
こちらはIPO投資を中心に取り上げているので、&lt;br &#x2F;&gt;
万人向けというわけではありませんが、&lt;br &#x2F;&gt;
&lt;strong&gt;銘柄分析の考え方などは他の投資でも参考になる部分があるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;現在投資をやっている人にはおすすめしたい一冊です&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;現在投資をやっている人&lt;&#x2F;li&gt;
&lt;li&gt;銘柄分析の方法が知りたい人&lt;&#x2F;li&gt;
&lt;li&gt;IPO投資に興味がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4046065427&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;トイレスマホで「無限10倍株」 3年9カ月で5975万円を稼いだ投資術&lt;&#x2F;a&gt;
&lt;h3 id=&quot;arutokoin-nabi&quot;&gt;アルトコイン ナビ&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000014722228.jpg&quot; alt=&quot;アルトコイン ナビ【電子書籍】[ 双葉社 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;アルトコイン ナビ【電子書籍】[ 双葉社 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%A2%E3%83%AB%E3%83%88%E3%82%B3%E3%82%A4%E3%83%B3%20%E3%83%8A%E3%83%93%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20%E5%8F%8C%E8%91%89%E7%A4%BE%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;cdeedd04cc4037b1ad3336b81b4d5220&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次は仮想通貨系です。&lt;&#x2F;p&gt;
&lt;p&gt;仮想通貨は、ブロックチェーンなどで成り立っているので、&lt;br &#x2F;&gt;
エンジニアリングと関わりが深い技術なので、&lt;br &#x2F;&gt;
投資するしないは別にしても、&lt;br &#x2F;&gt;
エンジニアとして最低限知っておいても損はないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは本というよりは雑誌ではあるのですが、&lt;br &#x2F;&gt;
アルトコインについて色々触れており、&lt;br &#x2F;&gt;
&lt;mark&gt;仮想通貨系の基礎知識を学ぶには適していると感じました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;途中にカルダノ開発のコラムなども載っており、&lt;br &#x2F;&gt;
使用しているプログラミング言語など、&lt;br &#x2F;&gt;
エンジニアとしても興味深いことが書かれているので、&lt;br &#x2F;&gt;
おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;仮想通貨に興味があるエンジニア&lt;&#x2F;li&gt;
&lt;li&gt;仮想通貨に投資している人&lt;&#x2F;li&gt;
&lt;li&gt;ブロックチェーンなどに興味がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CW1MQZXF&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;アルトコイン ナビ (双葉社スーパームック)&lt;&#x2F;a&gt;
&lt;h3 id=&quot;die-with-zero-ren-sheng-gali-kaninarisugirujiu-ji-noruru&quot;&gt;DIE WITH ZERO 人生が豊かになりすぎる究極のルール&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784478109687.jpg&quot; alt=&quot;DIE WITH ZERO　人生が豊かになりすぎる究極のルール [ ビル・パーキンス ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;DIE WITH ZERO　人生が豊かになりすぎる究極のルール [ ビル・パーキンス ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=DIE%20WITH%20ZERO%E3%80%80%E4%BA%BA%E7%94%9F%E3%81%8C%E8%B1%8A%E3%81%8B%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%99%E3%81%8E%E3%82%8B%E7%A9%B6%E6%A5%B5%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB%20%5B%20%E3%83%93%E3%83%AB%E3%83%BB%E3%83%91%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B9%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16433838&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;かなりの有名どころで恐縮ですが、&lt;br &#x2F;&gt;
この本です。&lt;&#x2F;p&gt;
&lt;p&gt;言わずもがなでかなり話題になった本なので、&lt;br &#x2F;&gt;
すでに読まれている方も多いかもしれませんが、&lt;br &#x2F;&gt;
一応紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;世間的価値観の多数派である、&lt;br &#x2F;&gt;
老後のためにお金を貯めないとならんという&lt;br &#x2F;&gt;
価値観とは真逆の&lt;mark&gt;お金を使い切って死のう&lt;&#x2F;mark&gt;という&lt;br &#x2F;&gt;
斬新な思想で話題になった本です。&lt;&#x2F;p&gt;
&lt;p&gt;その価値観の根拠や、&lt;br &#x2F;&gt;
お金を経験に使う合理性などについて&lt;br &#x2F;&gt;
本書で説明されているので、&lt;br &#x2F;&gt;
まだ読んでいない人は読んでみてください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;お金を経験に使うことについて疑念がある人&lt;&#x2F;li&gt;
&lt;li&gt;貯金の合理性に疑念がある人&lt;&#x2F;li&gt;
&lt;li&gt;お金の使い方に興味ある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB08K88Z2XR&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;DIE WITH ZERO　人生が豊かになりすぎる究極のルール&lt;&#x2F;a&gt;
&lt;h2 id=&quot;gazietuto-sonota-mai-tuteyokatutamono&quot;&gt;ガジェット・その他買ってよかったもの&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shure-se215&quot;&gt;SHURE SE215&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【最大1,000円クーポン！1&amp;#x2F;9 20:00 -1&amp;#x2F;16 01:59】SHURE シュア SE215 クリア Pro Line 有線イヤホン カナル型 イヤホン 有線 リケーブル対応 MMCX 耳掛け プロ仕様 メーカー保証2年 長期保証加入可 送料無料 国内正規品&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E6%9C%80%E5%A4%A71%2C000%E5%86%86%E3%82%AF%E3%83%BC%E3%83%9D%E3%83%B3%EF%BC%811%2F9%2020%3A00%20-1%2F16%2001%3A59%E3%80%91SHURE%20%E3%82%B7%E3%83%A5%E3%82%A2%20SE215%20%E3%82%AF%E3%83%AA%E3%82%A2%20Pro%20Line%20%E6%9C%89%E7%B7%9A%E3%82%A4%E3%83%A4%E3%83%9B%E3%83%B3%20%E3%82%AB%E3%83%8A%E3%83%AB%E5%9E%8B%20%E3%82%A4%E3%83%A4%E3%83%9B%E3%83%B3%20%E6%9C%89%E7%B7%9A%20%E3%83%AA%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB%E5%AF%BE%E5%BF%9C%20MMCX%20%E8%80%B3%E6%8E%9B%E3%81%91%20%E3%83%97%E3%83%AD%E4%BB%95%E6%A7%98%20%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E4%BF%9D%E8%A8%BC2%E5%B9%B4%20%E9%95%B7%E6%9C%9F%E4%BF%9D%E8%A8%BC%E5%8A%A0%E5%85%A5%E5%8F%AF%20%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%20%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E5%93%81&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;e-earphone&amp;#x2F;42406545143&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらは有線イヤホンです。&lt;&#x2F;p&gt;
&lt;p&gt;昨今ではBluetoothの無線イヤホンが主流になっていたりと、&lt;br &#x2F;&gt;
有線イヤホンは何かと斜陽気味ですが、&lt;br &#x2F;&gt;
やはり有線には無線にはないメリットもあったりします。&lt;&#x2F;p&gt;
&lt;p&gt;こちらのイヤホンは音質がフラットで、&lt;br &#x2F;&gt;
高音域も低音域も聞き取りやすく、&lt;br &#x2F;&gt;
様々な音楽ジャンルを聞くのに適した名器だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;音楽を聞かなくても、クセがないので&lt;br &#x2F;&gt;
配信用など様々なシチュエーションで使えるのも魅力だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、音楽用のモニターイヤホンでもあるので、&lt;br &#x2F;&gt;
&lt;mark&gt;遮音性が非常に高く、最大37dbの遮音性能があります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この遮音性能は、&lt;br &#x2F;&gt;
目の前でヘヴィメタルバンドの爆音ライブが&lt;br &#x2F;&gt;
激狭のライブハウスで行われていても、&lt;br &#x2F;&gt;
カラオケの一般的な音量ぐらいに聞こえるので、&lt;br &#x2F;&gt;
かなりの遮音性だと思います。&lt;br &#x2F;&gt;
(ちなみに、このライブを直接聴いたら数分で&lt;br &#x2F;&gt;
一時的な音響性難聴になるかもしれないレベルです(110dbぐらい)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、よくあるノイズキャンセリングイヤホンよりも、&lt;br &#x2F;&gt;
遮音性能的にはほとんど上回っているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;頻繁にライブを見に行く人には、&lt;br &#x2F;&gt;
耳栓代わりとしても優秀なので、&lt;br &#x2F;&gt;
よろしければぜひ手にとってみてください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;有線でイヤホンの名器が欲しい人&lt;&#x2F;li&gt;
&lt;li&gt;ノイズキャンセリング以上の遮音性を体感したい人&lt;&#x2F;li&gt;
&lt;li&gt;様々なシチュエーションで使える万能イヤホンが欲しい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB004WHRYPQ&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;【旧モデル】SHURE イヤホン SE215&amp;#x2F;カナル型 クリアー SE215-CL-J 【国内正規品】&lt;&#x2F;a&gt;
&lt;h3 id=&quot;wf-1000xm5-soniwaiyaresunoizukiyanseringuiyahon&quot;&gt;WF-1000XM5 ソニーワイヤレスノイズキャンセリングイヤホン&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【新品&amp;#x2F;正規品】ソニー ワイヤレスノイズキャンセリングイヤホン【WF-1000XM5】【2023年モデル】【カナル型】完全ワイヤレス&amp;#x2F;Amazon Alexa搭載&amp;#x2F;Bluetooth&amp;#x2F;LDAC対応&amp;#x2F;最大8時間連続再生&amp;#x2F;IPX4防滴性能&amp;#x2F;マイク付き&amp;#x2F;マルチポイント対応&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E6%96%B0%E5%93%81%2F%E6%AD%A3%E8%A6%8F%E5%93%81%E3%80%91%E3%82%BD%E3%83%8B%E3%83%BC%20%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9%E3%83%8E%E3%82%A4%E3%82%BA%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%BB%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%A4%E3%83%A4%E3%83%9B%E3%83%B3%E3%80%90WF-1000XM5%E3%80%91%E3%80%902023%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB%E3%80%91%E3%80%90%E3%82%AB%E3%83%8A%E3%83%AB%E5%9E%8B%E3%80%91%E5%AE%8C%E5%85%A8%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%AC%E3%82%B9%2FAmazon%20Alexa%E6%90%AD%E8%BC%89%2FBluetooth%2FLDAC%E5%AF%BE%E5%BF%9C%2F%E6%9C%80%E5%A4%A78%E6%99%82%E9%96%93%E9%80%A3%E7%B6%9A%E5%86%8D%E7%94%9F%2FIPX4%E9%98%B2%E6%BB%B4%E6%80%A7%E8%83%BD%2F%E3%83%9E%E3%82%A4%E3%82%AF%E4%BB%98%E3%81%8D%2F%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E5%AF%BE%E5%BF%9C&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;finebookpremiere&amp;#x2F;10003291&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;有線のイヤホンのおすすめを紹介したので、&lt;br &#x2F;&gt;
合わせて無線のイヤホンのおすすめを紹介したいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ノイズキャンセリングで無線というと&lt;br &#x2F;&gt;
Airpodsのイメージが強力ですが、&lt;br &#x2F;&gt;
個人的にはソニーの方がおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;理由はこちらのほうが、&lt;br &#x2F;&gt;
音質が好みというのが大きいですが、&lt;br &#x2F;&gt;
ノイズキャンセリングもこちらのほうが強力なような気もしたからです。&lt;&#x2F;p&gt;
&lt;p&gt;それでいて、現在(2025&#x2F;01月時点)だとAirPods Pro2よりも安いため、&lt;br &#x2F;&gt;
こちらの方がおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;イヤホンとしては決して安くはない金額ではありますが、&lt;br &#x2F;&gt;
一度良いものを買えば長く使えるので、&lt;br &#x2F;&gt;
個人的にはとてもおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;個人的に無線イヤホンではこれがNo1かなと思っています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ソニーはイヤホンだけでなく、&lt;br &#x2F;&gt;
ヘッドホンも非常に優秀なので、&lt;br &#x2F;&gt;
ヘッドホン派の人はWH-1000XM5とかもおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;無線イヤホンで最高クラスの商品が欲しい人&lt;&#x2F;li&gt;
&lt;li&gt;一つのものを長く使いたい人&lt;&#x2F;li&gt;
&lt;li&gt;ハイエンドイヤホンをまだ持っていない&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CBKS4THP&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;ソニー(SONY) ワイヤレスノイズキャンセリングイヤホン WF-1000XM5 :MISIA CMモデル&amp;#x2F;完全ワイヤレス&amp;#x2F;圧倒的ノイズキャンセリング性能&amp;#x2F;小型軽量設計&amp;#x2F;高性能マイク通話品質&amp;#x2F;Amazon Alexa搭載&amp;#x2F;Bluetooth&amp;#x2F;LDAC対応&amp;#x2F;最大8時間連続再生&amp;#x2F;IPX4防滴性能&amp;#x2F;2023年 &amp;#x2F; マイク付き&amp;#x2F;マルチポイント対応 プラチナシルバー WF-1000XM5 SC&lt;&#x2F;a&gt;
&lt;h3 id=&quot;loop-quiet-2&quot;&gt;Loop Quiet 2&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【スーパーDEAL20％Pバック！＋10％OFFクーポンあり】Loop Quiet2 クワイエット2【Loop ループ 公式】イヤープラグ 耳栓 送料無料 2年保証 30日間返品OK ソフトシリコン おしゃれ 水洗い 乗り物 睡眠 高性能 軽量 遮音 防音 旅行 機内 勉強 集中 仕事 読書 受験 育児&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BCDEAL20%EF%BC%85P%E3%83%90%E3%83%83%E3%82%AF%EF%BC%81%EF%BC%8B10%EF%BC%85OFF%E3%82%AF%E3%83%BC%E3%83%9D%E3%83%B3%E3%81%82%E3%82%8A%E3%80%91Loop%20Quiet2%20%E3%82%AF%E3%83%AF%E3%82%A4%E3%82%A8%E3%83%83%E3%83%882%E3%80%90Loop%20%E3%83%AB%E3%83%BC%E3%83%97%20%E5%85%AC%E5%BC%8F%E3%80%91%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%97%E3%83%A9%E3%82%B0%20%E8%80%B3%E6%A0%93%20%E9%80%81%E6%96%99%E7%84%A1%E6%96%99%202%E5%B9%B4%E4%BF%9D%E8%A8%BC%2030%E6%97%A5%E9%96%93%E8%BF%94%E5%93%81OK%20%E3%82%BD%E3%83%95%E3%83%88%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%20%E3%81%8A%E3%81%97%E3%82%83%E3%82%8C%20%E6%B0%B4%E6%B4%97%E3%81%84%20%E4%B9%97%E3%82%8A%E7%89%A9%20%E7%9D%A1%E7%9C%A0%20%E9%AB%98%E6%80%A7%E8%83%BD%20%E8%BB%BD%E9%87%8F%20%E9%81%AE%E9%9F%B3%20%E9%98%B2%E9%9F%B3%20%E6%97%85%E8%A1%8C%20%E6%A9%9F%E5%86%85%20%E5%8B%89%E5%BC%B7%20%E9%9B%86%E4%B8%AD%20%E4%BB%95%E4%BA%8B%20%E8%AA%AD%E6%9B%B8%20%E5%8F%97%E9%A8%93%20%E8%82%B2%E5%85%90&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;loopjapan&amp;#x2F;en-qt-2&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これはいろいろなところでおすすめされているので、&lt;br &#x2F;&gt;
すでに試したことがある人もいるかと思いますが、&lt;br &#x2F;&gt;
こちらは耳栓です。&lt;&#x2F;p&gt;
&lt;p&gt;耳栓というと、フィット感や、&lt;br &#x2F;&gt;
遮音性がイマイチだったりと当たり外れが大きいですが、&lt;br &#x2F;&gt;
&lt;mark&gt;こちらはフィット感がとても良く、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;つけていてもあまり気になりません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直遮音性については、&lt;br &#x2F;&gt;
めちゃくちゃ優れているというわけではないのですが、&lt;br &#x2F;&gt;
フィット感の良さと手入れのしやすさなどの点で、&lt;br &#x2F;&gt;
睡眠時の騒音を消すぐらいのレベルであれば、&lt;br &#x2F;&gt;
最も最適な耳栓だと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;ライブとかを見に行くための耳栓としては、&lt;br &#x2F;&gt;
遮音不足だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;睡眠時につける耳栓としては、&lt;br &#x2F;&gt;
フィット感も含めてとてもおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;私も以前、隣人の騒音トラブルがあった際、&lt;br &#x2F;&gt;
この耳栓にお世話になりました。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;フィット感が良い耳栓が欲しい人&lt;&#x2F;li&gt;
&lt;li&gt;睡眠時の騒音を和らげたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0D3V6TR98&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Loop Quiet 2 耳栓 – 睡眠 集中 移動 騒音過敏に適した超快適かつ再利用可能なノイズリダクション耳栓 | フレキシブルな聴覚保護具 | カスタマイズ可能なフィット感 | SNR値24dBのノイズリダクション&lt;&#x2F;a&gt;
&lt;h3 id=&quot;sin-tirasioduan-risutetuka&quot;&gt;Sin チラシお断りステッカー&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Sin(シン) チラシ お断り ステッカー 30mm x 150mm 勧誘印刷物の無断投函防止に&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Sin(%E3%82%B7%E3%83%B3)%20%E3%83%81%E3%83%A9%E3%82%B7%20%E3%81%8A%E6%96%AD%E3%82%8A%20%E3%82%B9%E3%83%86%E3%83%83%E3%82%AB%E3%83%BC%2030mm%20x%20150mm%20%E5%8B%A7%E8%AA%98%E5%8D%B0%E5%88%B7%E7%89%A9%E3%81%AE%E7%84%A1%E6%96%AD%E6%8A%95%E5%87%BD%E9%98%B2%E6%AD%A2%E3%81%AB&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;klavislab&amp;#x2F;uylgcuekvppibfwoesma5wpp3q&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次はちょっと変わり種の紹介です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;チラシお断りステッカーです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;たまにYoutubeとかでも紹介されているので、&lt;br &#x2F;&gt;
知っている方も多いと思いますが、&lt;br &#x2F;&gt;
実際に試したことがある人はまだそんなにいないのではないでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;私も存在自体は結構前から知っていましたが、&lt;br &#x2F;&gt;
実際に試したのは、去年が初めてでした。&lt;&#x2F;p&gt;
&lt;p&gt;これを貼る前は、一日でポストが埋まるレベルの&lt;br &#x2F;&gt;
チラシが毎日投げ込まれ、心底困っていたのですが、&lt;br &#x2F;&gt;
半信半疑でこれを貼ってみたら、&lt;br &#x2F;&gt;
笑っちゃうくらいチラシがなくなりました。&lt;&#x2F;p&gt;
&lt;p&gt;極稀にチラシが入っていることもありますが、&lt;br &#x2F;&gt;
100%が1%ぐらいまで減った感覚で、&lt;br &#x2F;&gt;
何気に去年買ったものの中で一番衝撃だったかもしれません(笑)&lt;&#x2F;p&gt;
&lt;p&gt;チラシがたくさん入っていると重要な書類を見逃してしまったりと、&lt;br &#x2F;&gt;
デメリットしかないので、チラシに悩まされている人はぜひ試してみてください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;チラシがたくさん入っていて困っている人&lt;&#x2F;li&gt;
&lt;li&gt;まだこのステッカーを試していない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB086PFHBLG&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Sin(シン) チラシ お断り ステッカー 30mm x 150mm 勧誘印刷物の無断投函防止に&lt;&#x2F;a&gt;
&lt;h3 id=&quot;dong-yang-zuo-mu-garasu-teisuteingugurasu&quot;&gt;東洋佐々木ガラス テイスティンググラス&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;東洋佐々木ガラス テイスティンググラス 190ml 36320 ウイスキーグラス タンブラー ビールグラス&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E6%9D%B1%E6%B4%8B%E4%BD%90%E3%80%85%E6%9C%A8%E3%82%AC%E3%83%A9%E3%82%B9%20%E3%83%86%E3%82%A4%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B0%E3%83%A9%E3%82%B9%20190ml%2036320%20%E3%82%A6%E3%82%A4%E3%82%B9%E3%82%AD%E3%83%BC%E3%82%B0%E3%83%A9%E3%82%B9%20%E3%82%BF%E3%83%B3%E3%83%96%E3%83%A9%E3%83%BC%20%E3%83%93%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%82%B9&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;wadatoki&amp;#x2F;36320&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらはややおまけではあるのですが、&lt;br &#x2F;&gt;
個人的に買ってよかったものなので紹介させてください。&lt;&#x2F;p&gt;
&lt;p&gt;平たく言うと、&lt;strong&gt;ウイスキーのストレートグラスのようなもの&lt;&#x2F;strong&gt;で、&lt;br &#x2F;&gt;
ウイスキーをストレートで飲むにはもちろん、&lt;br &#x2F;&gt;
香りを楽しむお酒であれば、どのジャンルでも&lt;br &#x2F;&gt;
使えるグラスかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;お酒を普段から楽しまれる方で、&lt;br &#x2F;&gt;
まだこのようなグラスを持っていない人は、&lt;br &#x2F;&gt;
一度試すとほかのグラスではお酒が飲めなくなるぐらい&lt;br &#x2F;&gt;
変わるのでぜひとも試してみてほしいです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;お酒が好きな方&lt;&#x2F;li&gt;
&lt;li&gt;ストレートグラスを持っていない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0BV21W4H9&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;東洋佐々木ガラス タンブラーグラス テイスティンググラス 190ml 日本製 食洗機対応 クリア コップ ビール ハイボール36320&lt;&#x2F;a&gt;
&lt;h3 id=&quot;huanuo-pcmonitaamu-deyuaruye-jing-deisupureiamu&quot;&gt;HUANUO PCモニターアーム デュアル液晶ディスプレイアーム&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;rakubb1490cd77.jpg&quot; alt=&quot;HUANUO PCモニターアーム デュアル 液晶ディスプレイアーム 2画面 13～30インチ対応 耐荷重2～9kg ガススプリング式 グロメット&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;HUANUO PCモニターアーム デュアル 液晶ディスプレイアーム 2画面 13～30インチ対応 耐荷重2～9kg ガススプリング式 グロメット&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=HUANUO%20PC%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%A2%E3%83%BC%E3%83%A0%20%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%20%E6%B6%B2%E6%99%B6%E3%83%87%E3%82%A3%E3%82%B9%E3%83%97%E3%83%AC%E3%82%A4%E3%82%A2%E3%83%BC%E3%83%A0%202%E7%94%BB%E9%9D%A2%2013%EF%BD%9E30%E3%82%A4%E3%83%B3%E3%83%81%E5%AF%BE%E5%BF%9C%20%E8%80%90%E8%8D%B7%E9%87%8D2%EF%BD%9E9kg%20%E3%82%AC%E3%82%B9%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E5%BC%8F%20%E3%82%B0%E3%83%AD%E3%83%A1%E3%83%83%E3%83%88&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;everydaydirect&amp;#x2F;rakubb1490cd77&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次はモニターアームです。&lt;br &#x2F;&gt;
画面一つのモニターアームは試したことありましたが、&lt;br &#x2F;&gt;
やはりエンジニアはモニターは2つほしい...&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、この商品は二画面のモニターアームになるので、&lt;br &#x2F;&gt;
便利なのと、&lt;strong&gt;取り付けもとても簡単でVESA規格のモニターなら&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;だいたいつけられるので、値段の割に使いやすくて&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;コストパフォマンスに優れていると思いました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;画面自体も結構いろいろな方向に動かすことができるので、&lt;br &#x2F;&gt;
最初のデュアルモニターアームとしておすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;まだ、デュアルモニターアームを持っていない人は&lt;br &#x2F;&gt;
ぜひとも試してみてください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;モニターを2つ以上使う人&lt;&#x2F;li&gt;
&lt;li&gt;デュアルモニターアームをまだ導入していない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB07W3KK949&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;HUANUO PCモニターアーム デュアル 液晶ディスプレイアーム 2画面 13～30インチ対応 耐荷重2～9kg ガススプリング式 グロメット式＆クランプ式 VESA100*100 多角度調節 ケーブル収納&lt;&#x2F;a&gt;
&lt;h3 id=&quot;sunon-dian-dong-sheng-jiang-desuku&quot;&gt;Sunon 電動昇降デスク&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【P5倍&amp;amp;2,000円クーポンOFF！】Sunon スタンディングデスク 2モーター 昇降 電動昇降デスク 昇降式デスク 120cm 衝突感知機能あり 昇降デスク 電動 デスク 昇降式 テーブル オフィス 上下昇降デスク 北欧 電動デスク 昇降テーブル 白 高さ調節 机 組立簡単&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90P5%E5%80%8D%262%2C000%E5%86%86%E3%82%AF%E3%83%BC%E3%83%9D%E3%83%B3OFF%EF%BC%81%E3%80%91Sunon%20%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%87%E3%82%B9%E3%82%AF%202%E3%83%A2%E3%83%BC%E3%82%BF%E3%83%BC%20%E6%98%87%E9%99%8D%20%E9%9B%BB%E5%8B%95%E6%98%87%E9%99%8D%E3%83%87%E3%82%B9%E3%82%AF%20%E6%98%87%E9%99%8D%E5%BC%8F%E3%83%87%E3%82%B9%E3%82%AF%20120cm%20%E8%A1%9D%E7%AA%81%E6%84%9F%E7%9F%A5%E6%A9%9F%E8%83%BD%E3%81%82%E3%82%8A%20%E6%98%87%E9%99%8D%E3%83%87%E3%82%B9%E3%82%AF%20%E9%9B%BB%E5%8B%95%20%E3%83%87%E3%82%B9%E3%82%AF%20%E6%98%87%E9%99%8D%E5%BC%8F%20%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%20%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%20%E4%B8%8A%E4%B8%8B%E6%98%87%E9%99%8D%E3%83%87%E3%82%B9%E3%82%AF%20%E5%8C%97%E6%AC%A7%20%E9%9B%BB%E5%8B%95%E3%83%87%E3%82%B9%E3%82%AF%20%E6%98%87%E9%99%8D%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%20%E7%99%BD%20%E9%AB%98%E3%81%95%E8%AA%BF%E7%AF%80%20%E6%9C%BA%20%E7%B5%84%E7%AB%8B%E7%B0%A1%E5%8D%98&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;isunon&amp;#x2F;ymx-120060&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次は電動昇降デスクです。&lt;&#x2F;p&gt;
&lt;p&gt;電動昇降デスクは便利とはよく聞くものの、&lt;br &#x2F;&gt;
お高いものも多く、実際に試したのは最近なのですが、&lt;br &#x2F;&gt;
やはり高さが変えられるといろいろな面で便利なので、&lt;br &#x2F;&gt;
&lt;strong&gt;フルリモートでデスクワークの人などには、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ぜひともおすすめしたいです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この商品は、電動昇降デスクの中では、&lt;br &#x2F;&gt;
比較的安く、組み立てとかもクセがなく容易なので、&lt;br &#x2F;&gt;
電動昇降デスク入門としていいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ケーブルを通す穴があったり、&lt;br &#x2F;&gt;
サイドに軽いものなどを掛けられるフックがあるのも&lt;br &#x2F;&gt;
地味に便利でいいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;普段からデスクワークの人&lt;&#x2F;li&gt;
&lt;li&gt;電動昇降デスクをとりあえず試してみたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0D7ZTS9HZ&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Sunon 昇降デスク 電動 昇降式デスク スタンディングデスク 幅140cm 耐荷重80kg 電動昇降デスク メモリー機能 静音 上下自動昇降 パソコンデスク 机 pcデスク オフィスデスク 作業机 テレワーク 【幅140 x 奥行き70 x 高さ72-122cm】 ナチュラルオーク(天板) &amp;#x2F;ホワイト(足)&lt;&#x2F;a&gt;
&lt;h3 id=&quot;switchbot-sumatosuituti-sumatorotuku&quot;&gt;SwitchBot スマートスイッチ&#x2F;スマートロック&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【マラソン★1,000円OFFクーポン配布中】 SwitchBot ドアロック Pro スマートロック 玄関ドア スマートリモコン オートロック 後付け ブラック スイッチボット ロックPro ロックプロ単品 ドアロック プロ 単品 スマホから開閉 遠隔操作 音声 アレクサ W3500000&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E3%83%9E%E3%83%A9%E3%82%BD%E3%83%B3%E2%98%851%2C000%E5%86%86OFF%E3%82%AF%E3%83%BC%E3%83%9D%E3%83%B3%E9%85%8D%E5%B8%83%E4%B8%AD%E3%80%91%20SwitchBot%20%E3%83%89%E3%82%A2%E3%83%AD%E3%83%83%E3%82%AF%20Pro%20%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%AD%E3%83%83%E3%82%AF%20%E7%8E%84%E9%96%A2%E3%83%89%E3%82%A2%20%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3%20%E3%82%AA%E3%83%BC%E3%83%88%E3%83%AD%E3%83%83%E3%82%AF%20%E5%BE%8C%E4%BB%98%E3%81%91%20%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%20%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%9C%E3%83%83%E3%83%88%20%E3%83%AD%E3%83%83%E3%82%AFPro%20%E3%83%AD%E3%83%83%E3%82%AF%E3%83%97%E3%83%AD%E5%8D%98%E5%93%81%20%E3%83%89%E3%82%A2%E3%83%AD%E3%83%83%E3%82%AF%20%E3%83%97%E3%83%AD%20%E5%8D%98%E5%93%81%20%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%8B%E3%82%89%E9%96%8B%E9%96%89%20%E9%81%A0%E9%9A%94%E6%93%8D%E4%BD%9C%20%E9%9F%B3%E5%A3%B0%20%E3%82%A2%E3%83%AC%E3%82%AF%E3%82%B5%20W3500000&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;kitcut-ps&amp;#x2F;522277&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;スイッチボット SwitchBot ボット ホワイト ブラック SWITCHBOT-W-GH SWITCHBOT-B-GH&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%83%9C%E3%83%83%E3%83%88%20SwitchBot%20%E3%83%9C%E3%83%83%E3%83%88%20%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88%20%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%20SWITCHBOT-W-GH%20SWITCHBOT-B-GH&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;superdeal&amp;#x2F;12368botgh230204&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;最後に、これは知っている人も多いと思いますが、&lt;br &#x2F;&gt;
やはり便利なので紹介しようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;機能としては、なにかのボタンとかを遠隔で押したりすることができる、&lt;br &#x2F;&gt;
&lt;strong&gt;スマート家電の一種で、例えばキッチンのタイマーや&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;エアコンのリモコンなどをスマホのアプリで遠隔で押したりもできます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これのおすすめの使い方としては、&lt;br &#x2F;&gt;
スマートロックと併用して、&lt;br &#x2F;&gt;
&lt;mark&gt;オートロックマンションの解除をこのSwitchBotにやってもらうことで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;障壁が多いオートロックマンションでもスマートロックを実現させることができます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、それ以外にもボタンを押したいときとかに使えるので、&lt;br &#x2F;&gt;
アイデア次第でいろいろなことができるのが魅力だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、スマートロックについても、&lt;br &#x2F;&gt;
私はセサミなども試したことがありますが、&lt;br &#x2F;&gt;
鍵を持ち歩かなくていいことや、&lt;br &#x2F;&gt;
鍵を一時的に発行したりもできるので、&lt;br &#x2F;&gt;
合鍵をもたせたりしなくても良かったりと、&lt;br &#x2F;&gt;
導入することで、かなり便利になりました。&lt;&#x2F;p&gt;
&lt;p&gt;個人的にはスマートロックはスマート家電の中でも、&lt;br &#x2F;&gt;
導入必須なぐらい便利だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;鍵を持ち歩きたくない人&lt;&#x2F;li&gt;
&lt;li&gt;家の家電の自動化、スマート化を進めたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CK2B4D11&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;SwitchBot スマートロック プロ 指紋認証パッド 暗証番号 - スイッチボット 鍵 スマートキー オートロック ドアロック 玄関 スマートホーム Alexa Google Home Siriに対応 遠隔対応 工事不要 取付カンタン 防犯対策 後付け ブラック&lt;&#x2F;a&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB07B7NXV4R&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;SwitchBot スイッチボット スイッチ ボタンに適用 指ロボット スマートスイッチ スマートホーム ワイヤレス タイマー スマホで遠隔操作 Alexa, Google Home, Siri, IFTTTなどに対応(ハブ必要) ホワイト&lt;&#x2F;a&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【JavaScriptオブジェクト】プロトタイプの仕組みと配列</title>
        <published>2025-01-09T00:00:00+00:00</published>
        <updated>2025-01-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/js_object/"/>
        <id>https://reisuta.com/js_object/</id>
        
        <content type="html" xml:base="https://reisuta.com/js_object/">&lt;p&gt;本記事ではJavaScriptのオブジェクトを中心に取り上げ、&lt;br &#x2F;&gt;
JavaScriptではオブジェクトの一種である配列についても取り上げます。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptにおけるオブジェクトは、&lt;br &#x2F;&gt;
Rubyなどの他のオブジェクト指向言語とは全体的に異なる部分が多く、&lt;br &#x2F;&gt;
突き詰めると結構複雑かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、JavaScriptにおけるオブジェクトについて&lt;br &#x2F;&gt;
触れていこうと思います。&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873119707&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;JavaScript 第7版&lt;&#x2F;a&gt;
&lt;h2 id=&quot;obuziekuto&quot;&gt;オブジェクト&lt;&#x2F;h2&gt;
&lt;p&gt;オブジェクトとはなにか。&lt;br &#x2F;&gt;
オブジェクト指向プログラミングとかの文脈でいうと、&lt;br &#x2F;&gt;
モノ、値みたいに語られることもあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、JavaScriptのオブジェクトは、&lt;br &#x2F;&gt;
それとは少し毛色が変わっていて、&lt;br &#x2F;&gt;
&lt;strong&gt;複合型のデータ型&lt;&#x2F;strong&gt;で、プロパティの集合と言えると思います。&lt;br &#x2F;&gt;
(プロパティについては後に説明します)&lt;&#x2F;p&gt;
&lt;p&gt;言うなればプリミティブ型でないものが、&lt;br &#x2F;&gt;
オブジェクトと言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;その点、Rubyとかに代表されるオブジェクト指向プログラミングの、&lt;br &#x2F;&gt;
オブジェクトとはやや定義が異なるかと思います(Rubyとかは、&lt;br &#x2F;&gt;
すべてがオブジェクトといえると思うので)&lt;&#x2F;p&gt;
&lt;p&gt;まあ、ぐだぐだ説明するより、&lt;br &#x2F;&gt;
具体例を出すと&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; object1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; object2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { x:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;, y:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいな&lt;code&gt;{}&lt;&#x2F;code&gt;のデータ構造が、&lt;br &#x2F;&gt;
もっとも著名なオブジェクトといえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;strong&gt;&lt;code&gt;{}&lt;&#x2F;code&gt; のことをオブジェクトリテラル&lt;&#x2F;strong&gt;と言ったりもします。&lt;&#x2F;p&gt;
&lt;p&gt;上記のように、&lt;mark&gt;プロパティは、プロパティ名(キー)とプロパティの値(バリュー)を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;: (コロン)で区切って定義し、プロパティ間は、, (カンマ)で区切ります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;code&gt;new Object()&lt;&#x2F;code&gt; や&lt;code&gt;Object.create()&lt;&#x2F;code&gt;のようにオブジェクトを生成することもできます。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトの値へのアクセス方法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;obj.value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;obj[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;value&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;といった、配列表記とドット識別子を使う方法の2通りあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;配列表記のほうが、例えば&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;code&gt;obj[answer]&lt;&#x2F;code&gt; みたいに、answerといった変数名を渡して、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;動的に値を取得したりすることもできます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
(プロパティ名がループなどで動的に変化するときなどはこちらの記述が便利だったりします)&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、関数をオブジェクトとともに使うと、&lt;br &#x2F;&gt;
メソッドと呼びます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;まさにpushメソッド&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記は配列ですが、&lt;br &#x2F;&gt;
pushメソッドはArrayプロトタイプのメソッドです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;puropateitohahe-ka&quot;&gt;プロパティとは何か&lt;&#x2F;h3&gt;
&lt;p&gt;さて、オブジェクトの概要はさらいましたが、&lt;br &#x2F;&gt;
改めて少し深堀りしようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、プロパティとは何かというと名前と値を持つもので、&lt;br &#x2F;&gt;
JavaScript Primerでは下記のように説明されていました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jsprimer.net&#x2F;basic&#x2F;object&quot;&gt;https:&#x2F;&#x2F;jsprimer.net&#x2F;basic&#x2F;object&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;プロパティとは名前（キー）と値（バリュー）が対になったものです。 プロパティのキーには文字列または&lt;code&gt;Symbol&lt;&#x2F;code&gt;が利用でき、値には任意のデータを指定できます。 また、1つのオブジェクトは複数のプロパティを持てるため、1つのオブジェクトで多種多様な値を表現できます。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScript Primerより&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;要するに&lt;mark&gt;オブジェクトのなかにあるキーとバリュー2つを合わせたもので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;文脈によってプロパティ名(キー)とか、プロパティの値(バリュー)って言ったりするかと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このプロパティという用語ですが、&lt;br &#x2F;&gt;
実際にプログラムを書くうえでは知らなくても&lt;br &#x2F;&gt;
そこまで問題ないのですが、&lt;br &#x2F;&gt;
本とかドキュメントを読む際に結構プロパティという用語を使って、&lt;br &#x2F;&gt;
オブジェクトを説明していることが多いので、&lt;br &#x2F;&gt;
知っておくと便利かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そもそもJavaScriptは、もともとプロトタイプベースということもあり、&lt;br &#x2F;&gt;
オブジェクトに自分で定義したプロパティ以外に、&lt;br &#x2F;&gt;
組み込みで定義されているプロパティとかもあったりします。&lt;&#x2F;p&gt;
&lt;p&gt;なので、組み込みではなくて、自分で定義したプロパティを、&lt;br &#x2F;&gt;
&lt;strong&gt;独自プロパティ&lt;&#x2F;strong&gt;といったりします。&lt;&#x2F;p&gt;
&lt;p&gt;また、独自プロパティと組み込みのプロパティでは、&lt;br &#x2F;&gt;
諸々挙動が異なり、その違いを下記の属性で表すと&lt;br &#x2F;&gt;
わかりやすいと思います。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;書き込み可能 → プロパティに値を設定できる&lt;&#x2F;li&gt;
&lt;li&gt;列挙可能 → for&#x2F;inループなどでプロパティ名を調べることができる&lt;&#x2F;li&gt;
&lt;li&gt;再定義可能 → プロパティの削除、属性変更が可能&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;JavaScriptの組み込みのプロパティは、読み取り専用なので、&lt;br &#x2F;&gt;
列挙や再定義はできないのに対し、&lt;br &#x2F;&gt;
独自プロパティは、デフォルトでは上記すべて可能になっています&lt;br &#x2F;&gt;
(&lt;code&gt;Object.defineProperty()&lt;&#x2F;code&gt;などを使って、&lt;br &#x2F;&gt;
この属性を変更することもできます。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Object&#x2F;defineProperty&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Object&#x2F;defineProperty&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このように、JavaScriptのプロパティはこのように&lt;br &#x2F;&gt;
オブジェクトを理解するうえで重要な概念です。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;puropateinojian-lue-ji-fa&quot;&gt;プロパティの簡略記法&lt;&#x2F;h4&gt;
&lt;p&gt;ES6以降では、プロパティ名と値が同じ場合、&lt;br &#x2F;&gt;
省略することができます&lt;&#x2F;p&gt;
&lt;p&gt;この構文は個人的にはちょっと気に入っています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;, y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { x: x, y: y}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; ↑こう書いていたものを下記のように省略できる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { x, y }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この記法は、Nuxt.jsとかのuseAsyncDataあたりを使う際に、&lt;br &#x2F;&gt;
地味に使ったりするので、こういう書き方もできることは&lt;br &#x2F;&gt;
知っておくと良いかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;purototaipu&quot;&gt;プロトタイプ&lt;&#x2F;h3&gt;
&lt;p&gt;JavaScriptのオブジェクトは、&lt;br &#x2F;&gt;
プロトタイプと大きな関係を持っています。&lt;&#x2F;p&gt;
&lt;p&gt;そもそも、JavaScriptは、&lt;br &#x2F;&gt;
Rubyなどとは異なり、プロトタイプベースの&lt;br &#x2F;&gt;
オブジェクト指向をルーツとしていることは、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;#JavaScript%E3%81%AE%E6%A6%82%E8%A6%81&quot;&gt;下記の記事&lt;&#x2F;a&gt;で解説しました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;#JavaScript%E3%81%AE%E6%A6%82%E8%A6%81&quot;&gt;【JavaScript概要】環境構築と変数について&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、classを使うオブジェクト指向とは異なり、&lt;br &#x2F;&gt;
&lt;strong&gt;プロトタイプを使ってオブジェクト指向を体現するという特徴があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Prototype-based_programming&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Prototype-based_programming&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、プロトタイプとは、JavaScriptのオブジェクトが&lt;br &#x2F;&gt;
他から機能を継承する仕組みのようなものとMDNで解説しているように、&lt;br &#x2F;&gt;
オブジェクトに関連付けられている、&lt;strong&gt;もう一つの別のオブジェクトのようなもの&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Learn_web_development&#x2F;Extensions&#x2F;Advanced_JavaScript_objects&#x2F;Object_prototypes&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Learn_web_development&#x2F;Extensions&#x2F;Advanced_JavaScript_objects&#x2F;Object_prototypes&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば下記のようなオブジェクトを定義してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  color:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;red&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  hello&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;test.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;hello&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; hello world&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;testというオブジェクトには、&lt;br &#x2F;&gt;
独自プロパティとして、colorとhelloの2つを持っています。&lt;br &#x2F;&gt;
(ちなみに最初ちらっと触れましたが、このようにオブジェクトに&lt;br &#x2F;&gt;
定義されている、helloのような関数をメソッドといいます)&lt;&#x2F;p&gt;
&lt;p&gt;独自プロパティかどうかは、&lt;code&gt;Object.hasOwn&lt;&#x2F;code&gt; を使って、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;hasOwn&lt;&#x2F;span&gt;&lt;span&gt;(test,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;color&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;hasOwn&lt;&#x2F;span&gt;&lt;span&gt;(test,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにして調べられます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Object&#x2F;hasOwn&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Object&#x2F;hasOwn&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これだけ見るとtestというオブジェクトは、&lt;br &#x2F;&gt;
2つのプロパティしか持っていないようにも思えますが、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;test.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;toString&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいなメソッドを呼び出せることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;これこそがプロトタイプの正体で、&lt;br &#x2F;&gt;
オブジェクトは、このような&lt;strong&gt;プロトタイプと呼ばれる組み込みプロパティ&lt;&#x2F;strong&gt;を持っています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;プロトタイプ自体もオブジェクト&lt;&#x2F;mark&gt;なので、さらにそれらのプロトタイプを持つという、&lt;br &#x2F;&gt;
プロトタイプチェーンが成立します。&lt;&#x2F;p&gt;
&lt;p&gt;プロトタイプにnullを持つプロトタイプに到達すると、&lt;br &#x2F;&gt;
プロトタイプチェーンは終わります。&lt;&#x2F;p&gt;
&lt;p&gt;classでのオブジェクト指向的に言うと、&lt;br &#x2F;&gt;
親のようなものから継承しているといったらわかりやすいかもしれません。&lt;br &#x2F;&gt;
(すなわちオブジェクトの親のオブジェクトが持っているプロパティを子も使えるみたいな)&lt;&#x2F;p&gt;
&lt;p&gt;なので、test自体にtoString()というメソッドがなくても、&lt;br &#x2F;&gt;
testのプロトタイプがtoString()を持っているから&lt;br &#x2F;&gt;
呼び出すことができます。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトのプロパティをアクセスした際、&lt;br &#x2F;&gt;
探す順番としては、&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;独自プロパティ&lt;&#x2F;li&gt;
&lt;li&gt;プロトタイプ&lt;&#x2F;li&gt;
&lt;li&gt;プロトタイプのプロトタイプ&lt;br &#x2F;&gt;
※以下探すまで繰り返してnullに到達したらundefinedを返す&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;オブジェクトのプロトタイプを調べるには、&lt;br &#x2F;&gt;
&lt;code&gt;Object.getPrototypeOf()&lt;&#x2F;code&gt; を使います&lt;&#x2F;p&gt;
&lt;h4 id=&quot;object-create&quot;&gt;Object.create&lt;&#x2F;h4&gt;
&lt;p&gt;先ほどプロトタイプは、継承のようなものと触れたように、&lt;br &#x2F;&gt;
JavaScriptの&lt;code&gt;Object.create&lt;&#x2F;code&gt; を使えば、&lt;br &#x2F;&gt;
classの継承のようなものを表現できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 親: 機械 (machine)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; machine&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  isPowered:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  start&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;機械が動き始めました&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 子: 車 (car)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; car&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;(machine)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car.name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Aqua&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 車の名前を設定&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car.isPowered&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 親から継承したプロパティを上書き&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;drive&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; が走り始めました`&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 孫: 電気自動車 (electricCar)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; electricCar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;(car)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;electricCar.batteryLevel&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 孫の独自プロパティ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;electricCar.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;charge&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span&gt; () {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;  this&lt;&#x2F;span&gt;&lt;span&gt;.batteryLevel&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;this&lt;&#x2F;span&gt;&lt;span&gt;.name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; のバッテリーが充電されました`&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 出力&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;--- 機械 (machine) の動作 ---&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;machine.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 機械が動き始めました&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;--- 車 (car) の動作 ---&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 親から継承したメソッド&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;car.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;drive&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; Aqua が走り始めました&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;--- 電気自動車 (electricCar) の動作 ---&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;electricCar.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 親から継承したメソッド&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;electricCar.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;drive&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; Aqua が走り始めました&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;electricCar.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;charge&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; Aqua のバッテリーが充電されました&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; プロトタイプチェーン&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;--- プロトタイプチェーンの確認 ---&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;getPrototypeOf&lt;&#x2F;span&gt;&lt;span&gt;(electricCar))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; car オブジェクト&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;getPrototypeOf&lt;&#x2F;span&gt;&lt;span&gt;(car))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; machine オブジェクト&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;getPrototypeOf&lt;&#x2F;span&gt;&lt;span&gt;(machine))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; Object オブジェクト&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;getPrototypeOf&lt;&#x2F;span&gt;&lt;span&gt;(Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;getPrototypeOf&lt;&#x2F;span&gt;&lt;span&gt;(machine)))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちょっと長いコードになってしまいましたが、&lt;br &#x2F;&gt;
classのオブジェクト指向と似たようなことが実装できることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;また&lt;code&gt;Object.getPrototypeOf&lt;&#x2F;code&gt; でプロトタイプを確認できるので、&lt;br &#x2F;&gt;
上記のコードの場合は親のオブジェクトを参照できるような構造になっているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_object&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;h4 id=&quot;json-stringifytojson-parse&quot;&gt;JSON.stringifyとJSON.parse&lt;&#x2F;h4&gt;
&lt;p&gt;割と見かけることが多いこれらのメソッド。&lt;&#x2F;p&gt;
&lt;p&gt;JSONを扱う上で、シリアライズと復元に、&lt;br &#x2F;&gt;
nullはサポートされているが、undefinedやNaNとかは&lt;br &#x2F;&gt;
サポートされていなかったりnullに変換されるという特徴があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {x:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, y:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;undefined&lt;&#x2F;span&gt;&lt;span&gt;, z: {x:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; NaN&lt;&#x2F;span&gt;&lt;span&gt;, y:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Infinity&lt;&#x2F;span&gt;&lt;span&gt;, z:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Infinity&lt;&#x2F;span&gt;&lt;span&gt; }}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;JSON.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;stringify&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; undefinedはサポートされず&amp;#39;{&amp;quot;x&amp;quot;:1,&amp;quot;z&amp;quot;:{&amp;quot;x&amp;quot;:null,&amp;quot;y&amp;quot;:null,&amp;quot;z&amp;quot;:null}}&amp;#39;が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;やや細かめではありますが、&lt;br &#x2F;&gt;
頭の片隅に入れておくと役に立つかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;細かい復元の法則は下記のMDNのドキュメントが詳しいです。&lt;&#x2F;p&gt;
&lt;p&gt;特にundefinedがオブジェクトの中だと省略されたり、&lt;br &#x2F;&gt;
配列の中だとnull に変換されたりする特徴はnullとの違いとして、&lt;br &#x2F;&gt;
留意しておくと良いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;JSON&#x2F;stringify#%E8%A7%A3%E8%AA%AC&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;JSON&#x2F;stringify#%E8%A7%A3%E8%AA%AC&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;inyan-suan-zi-tofor-in&quot;&gt;in演算子とfor in&lt;&#x2F;h4&gt;
&lt;p&gt;指定されたプロパティがオブジェクトに存在するか調べたいとき&lt;br &#x2F;&gt;
in演算子が使えます。&lt;&#x2F;p&gt;
&lt;p&gt;プロパティが存在する場合、 true を返します&lt;&#x2F;p&gt;
&lt;p&gt;in演算子は、独自プロパティだけでなく、&lt;br &#x2F;&gt;
&lt;mark&gt;継承プロパティについても、オブジェクトが指定したものを&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;持つ場合、trueを返すという特徴があります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、独自プロパティだけを調べたいときは、&lt;br &#x2F;&gt;
&lt;code&gt;Object.hasOwn()&lt;&#x2F;code&gt; を使う方がいいでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;toString&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; trueを返す&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;x&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; falseを返す&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次にfor in周りに触れていきたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;for inループは、&lt;br &#x2F;&gt;
継承されたプロパティも含めて、&lt;br &#x2F;&gt;
列挙可のプロパティであれば、それについてループを実行します。&lt;&#x2F;p&gt;
&lt;p&gt;このとき、&lt;strong&gt;オブジェクトが継承する組み込みメソッド(toStringとか)は、&lt;br &#x2F;&gt;
列挙可ではないので、for inループでは通常出力されません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(最初に述べた列挙可という特徴は主にfor inで重要になってくるかと思います)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {x:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Object.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;create&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; y) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(p)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 継承プロパティのxも出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;y.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;hasOwnProperty&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;x&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; y自体にはxというプロパティはないのでfalseを返す&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;pei-lie&quot;&gt;配列&lt;&#x2F;h2&gt;
&lt;p&gt;さて次は配列についてです。&lt;&#x2F;p&gt;
&lt;p&gt;とはいってもJavaScriptにおいて配列もオブジェクトのひとつなので、&lt;br &#x2F;&gt;
概ねの考え方はオブジェクトと大幅に変わるわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptの配列のインデックスは0から始まります。&lt;br &#x2F;&gt;
配列は、オブジェクトの特別な形式で、&lt;code&gt;Array.prototype&lt;&#x2F;code&gt; からプロパティを継承します&lt;&#x2F;p&gt;
&lt;p&gt;配列を作成するには、&lt;br &#x2F;&gt;
配列リテラルで作成できます&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; array2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;配列の中にオブジェクトや配列とかをいれることもできます&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; array3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;], {x:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;, y:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;}, array3]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、存在しないインデックスを指定するとundefindが返されます。&lt;&#x2F;p&gt;
&lt;p&gt;スプレッド演算子を使えば、&lt;br &#x2F;&gt;
反復可能なオブジェクトに対して機能し、&lt;br &#x2F;&gt;
配列を作成できます。&lt;&#x2F;p&gt;
&lt;p&gt;スプレッド演算子とは、&lt;code&gt;...&lt;&#x2F;code&gt; という構文で&lt;br &#x2F;&gt;
既存オブジェクトを新しいオブジェクトに展開できる機能です。&lt;&#x2F;p&gt;
&lt;p&gt;文字列も反復可能なので、&lt;br &#x2F;&gt;
例えば、A から Zまでのアルファベットの配列を作りたかったら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;...&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいにすれば、それぞれのアルファベットが格納された配列を作成できます。&lt;&#x2F;p&gt;
&lt;p&gt;また、くどいですがJavaScriptにおいて、&lt;br &#x2F;&gt;
配列はオブジェクトの一種です。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、配列をアクセスすときに使う、&lt;br &#x2F;&gt;
角括弧はオブジェクトのプロパティへのアクセスと同じように処理します。&lt;&#x2F;p&gt;
&lt;p&gt;そのため&lt;mark&gt;整数以外をプロパティとすることもできます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;12.30&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 0が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;しかし、この場合、オブジェクトのプロパティ名として扱われるので、&lt;br &#x2F;&gt;
lengthプロパティは更新されず、0となります。&lt;&#x2F;p&gt;
&lt;p&gt;あくまでオブジェクトとして&lt;br &#x2F;&gt;
これらのプロパティ名が入っている形式になっています。&lt;&#x2F;p&gt;
&lt;p&gt;このlengthプロパティは配列において重要なプロパティで、&lt;br &#x2F;&gt;
配列はこれを監視し、lengthの値を配列と同期させます。&lt;&#x2F;p&gt;
&lt;p&gt;プロパティに、整数を渡したときだけ、&lt;br &#x2F;&gt;
インデックスとして処理し、lengthプロパティを更新するのが、&lt;br &#x2F;&gt;
配列のようなオブジェクトです。&lt;br &#x2F;&gt;
(配列のようなというのは、厳密にはオブジェクトについて、&lt;br &#x2F;&gt;
lengthプロパティとかを持たせて配列のように扱うことも可能であるからです)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 33と返される [1, empty × 31, 1, test: 1]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、存在しないプロパティを参照しようとした場合、&lt;br &#x2F;&gt;
undefinedが返されます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記で作成されたemptyというものも、&lt;br &#x2F;&gt;
インデックスアクセスするとundefinedが返されますが、&lt;br &#x2F;&gt;
ループなどで処理する場合はスキップされます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Indexed_collections#%E7%96%8E%E9%85%8D%E5%88%97&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Indexed_collections#%E7%96%8E%E9%85%8D%E5%88%97&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;lengthについて、現在の長さよりも、&lt;br &#x2F;&gt;
小さい値を代入すれば、配列を縮めることもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 33と返される [1, empty × 31, 1, test: 1]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 10 [1, empty × 9, test: 1]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;要素が0から埋まっていない配列を疎な配列といい、&lt;br &#x2F;&gt;
この場合、要素がなくてもlengthプロパティが要素数を表します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; Array&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こうした疎な配列を密な配列に変換したいときは、&lt;br &#x2F;&gt;
filterメソッドなどが便利です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;32&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;filter&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a.length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、配列はオブジェクトの一種なので、&lt;br &#x2F;&gt;
オブジェクトみたいに&lt;code&gt;a.0&lt;&#x2F;code&gt; みたいにアクセスできるのかというと&lt;br &#x2F;&gt;
できません。($をつけるといけるみたいです)&lt;&#x2F;p&gt;
&lt;p&gt;数字で始まるプロパティはブラケット記法でないとエラーになります。&lt;br &#x2F;&gt;
なので、配列に定義した&lt;code&gt;a[&#x27;test&#x27;]&lt;&#x2F;code&gt; みたいなやつはドット記法でもアクセスできます&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Operators&#x2F;Property_accessors#%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88%E8%A8%98%E6%B3%95&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Operators&#x2F;Property_accessors#%E3%83%96%E3%83%A9%E3%82%B1%E3%83%83%E3%83%88%E8%A8%98%E6%B3%95&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873119707&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;JavaScript 第7版&lt;&#x2F;a&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB09HC854HS&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;独習JavaScript 新版&lt;&#x2F;a&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【JavaScriptの非同期処理】async&#x2F;await&#x2F;Promise</title>
        <published>2024-12-06T00:00:00+00:00</published>
        <updated>2024-12-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/asynchronous_processing/"/>
        <id>https://reisuta.com/asynchronous_processing/</id>
        
        <content type="html" xml:base="https://reisuta.com/asynchronous_processing/">&lt;p&gt;JavaScriptを使う上で、&lt;br &#x2F;&gt;
非同期処理の知識は、やはり避けては通れないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;それぐらい特にJavaScriptにおいては、&lt;br &#x2F;&gt;
非同期処理を使う機会が多い印象です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;本記事ではそんなJavaScriptの非同期処理について&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;触れていきたいと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptは、非同期処理をサポートするために設計されたシングルスレッドのプログラミング言語です。非同期処理は、時間のかかる操作（ネットワーク通信やファイルの読み書きなど）を他の処理をブロックせずに実行するために欠かせません。&lt;&#x2F;p&gt;
&lt;p&gt;この記事では、JavaScriptの非同期処理について、基本概念から具体例、そして効果的な実装方法までをわかりやすく解説します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、JavaScript自体がまだよくわからんという人は、&lt;br &#x2F;&gt;
下記の記事で紹介していますので、先にこちらを御覧ください&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;&quot;&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fei-tong-qi-chu-li-toha&quot;&gt;非同期処理とは&lt;&#x2F;h2&gt;
&lt;p&gt;そもそも非同期処理とはなんでしょう。&lt;br &#x2F;&gt;
MDNの解説をみてみると、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;非同期プログラミングは、長く続く可能性のあるタスクを開始しても、そのタスクが完了するまで待つのではなく、そのタスクの実行中も他のイベントに応答できるようにする技術です。タスクが完了すると、プログラムはその結果を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;MDNより引用 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Learn&#x2F;JavaScript&#x2F;Asynchronous&#x2F;Introducing&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Learn&#x2F;JavaScript&#x2F;Asynchronous&#x2F;Introducing&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;みたいな感じで書かれていました。&lt;&#x2F;p&gt;
&lt;p&gt;要するに、&lt;mark&gt;ある処理が完了するまで待つのではなく、別の処理を並行して実行できる仕組み&lt;&#x2F;mark&gt;と&lt;br &#x2F;&gt;
言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;例えばapiを叩く場合ときなどは、&lt;br &#x2F;&gt;
それなりに時間がかかったりするので、&lt;br &#x2F;&gt;
通常非同期で実装する必要があると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、非同期処理自体は&lt;br &#x2F;&gt;
JavaScript固有のものではなく、&lt;br &#x2F;&gt;
他のプログラミング言語とかにも存在する概念です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、最も使用頻度が多かったり、非同期処理で有名な言語はなんだって言われると、&lt;br &#x2F;&gt;
JavaScriptを答える人が多い気はしています。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、例えばNeovimとかでファイルを保存した際に、&lt;br &#x2F;&gt;
Lintを走らせたりするのも非同期処理の活用例かもしれないですね。&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4873119707&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;JavaScript 第7版&lt;&#x2F;a&gt;
&lt;h3 id=&quot;tong-qi-chu-li-tofei-tong-qi-chu-li-nowei-i&quot;&gt;同期処理と非同期処理の違い&lt;&#x2F;h3&gt;
&lt;p&gt;非同期処理というぐらいなので、&lt;br &#x2F;&gt;
同期処理というのもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;同期処理は、一つの処理が終わるまで次の処理は実行されない、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;平たく言うといつも書いているような上から順番に逐次的に実行されるような処理です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 同期処理の例&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理1開始&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理1終了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理2開始&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理2終了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 出力&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理1開始&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理1終了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理2開始&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理2終了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;なんのひねりもなく、&lt;br &#x2F;&gt;
上から順番に表示されると思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;code&gt;console.log(&quot;処理1開始&quot;)&lt;&#x2F;code&gt; が終わったら、&lt;br &#x2F;&gt;
次の行を実行するというような感じで、&lt;br &#x2F;&gt;
前の処理が終わらないと次に進まない形式になっていると思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;一方で非同期処理の場合は、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;前の処理が終わるのとは関係なく、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;次の処理に反応できるようなプログラミング手法でしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;非同期処理の例&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理1開始&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;非同期処理終了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;},&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理2開始&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 出力&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理1開始&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 処理2開始&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 非同期処理終了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;同期処理的にみると、真ん中のsetTimeoutが1つ目の次に実行されるのではと&lt;br &#x2F;&gt;
思いますが、非同期処理の場合、この2つ目の実行が終わるのを待たずに、&lt;br &#x2F;&gt;
&lt;code&gt;console.log(&quot;処理2開始&quot;)&lt;&#x2F;code&gt; が実行されています。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、同期処理と非同期処理の違いは、&lt;br &#x2F;&gt;
このような前の処理が終わるのを待ってから次の処理に入るか入らないかの&lt;br &#x2F;&gt;
違いと考えるとわかりやすいかもしれません。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;javascriptdefei-tong-qi-chu-li-woxi-ufang-fa&quot;&gt;&lt;strong&gt;JavaScriptで非同期処理を扱う方法&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;さて、そんな非同期処理ですが、&lt;br &#x2F;&gt;
メリットはやはり前の処理の結果を待たなくていいので、&lt;br &#x2F;&gt;
同期処理よりもパフォーマンスを上げやすいという特徴があります。&lt;&#x2F;p&gt;
&lt;p&gt;そんな非同期処理をJavaScriptでは具体的にどういうコードを使って&lt;br &#x2F;&gt;
書くのか見ていきたいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;settimeouttokorubatukuguan-shu&quot;&gt;setTimeoutとコールバック関数&lt;&#x2F;h3&gt;
&lt;p&gt;非同期処理のチュートリアルでだいたい最初に出てくる、&lt;br &#x2F;&gt;
setTimeoutから触れていこうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、非同期処理を実装するうえで、&lt;br &#x2F;&gt;
コールバック関数という概念を知っておいたほうが&lt;br &#x2F;&gt;
良いと思うので、こちらも先に触れます。&lt;&#x2F;p&gt;
&lt;p&gt;コールバック関数は、非同期処理が完了したときに呼び出される関数と&lt;br &#x2F;&gt;
言及されたり説明されたりすることが多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;この説明だと、微妙に足りない気がしていて、&lt;br &#x2F;&gt;
下記のMDNのリンクによるところの、非同期コールバックの説明になっていると思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Callback_function&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Callback_function&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;asynchronous_processing&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;コールバック関数は、本来非同期処理固有のものというわけではなく、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;引数として他の関数に渡される関数のことです。&lt;&#x2F;strong&gt;(それこそ同期コールバックの例なmapとか)&lt;&#x2F;p&gt;
&lt;p&gt;MDN的に言うなら、この関数が非同期的に呼び出されるか、&lt;br &#x2F;&gt;
同期的に呼び出されるかで、実行結果に影響したりという感じだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;下記はsetTimeout(非同期コールバックの例)と併用した、コールバック関数の例です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; doSomething&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;callback&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理を開始します&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理が完了しました&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    callback&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; コールバック関数を呼び出す&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;doSomething&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;次の処理を実行します&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、JavaScriptの場合、&lt;br &#x2F;&gt;
コールバック地獄という有名な現象があり、&lt;br &#x2F;&gt;
このイメージからコールバック関数というと非同期処理でしょ！&lt;br &#x2F;&gt;
みたいなイメージになっているのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;下記は、そんなコールバック地獄のコード例です。&lt;br &#x2F;&gt;
ネストが激しくて読みづらいですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;1秒後&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;さらに1秒後&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;さらにさらに1秒後&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;},&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次に触れますが、こんなコールバック地獄を&lt;br &#x2F;&gt;
解消したものが、Promiseやthenになります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;promise&quot;&gt;Promise&lt;&#x2F;h3&gt;
&lt;p&gt;Promiseは、めちゃくちゃ詳細にかっちり説明すると、&lt;br &#x2F;&gt;
わけがわからなくなってくるぐらい複雑な概念(複雑というより細かい？)ですが、&lt;br &#x2F;&gt;
めちゃくちゃ平たく言うと、&lt;strong&gt;非同期処理をより使いやすくするための、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ツール&lt;&#x2F;strong&gt;と考えればシンプルだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、Promiseを使わないで、&lt;br &#x2F;&gt;
非同期コールバック地獄のコードを書いてしまうと、&lt;br &#x2F;&gt;
エラーハンドリングが困難になる点と、そもそもネストになるので、&lt;br &#x2F;&gt;
読みにくくなります。&lt;&#x2F;p&gt;
&lt;p&gt;その点Promiseを使えば、非同期処理の状態（Pending, Fulfilled, Rejected)をハンドリングできるので、&lt;br &#x2F;&gt;
簡潔に実装できるというメリットがあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; promise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; reject&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 非同期処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;成功しました&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;promise&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;then&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(result);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 成功時の処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  })&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;catch&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;error&lt;&#x2F;span&gt;&lt;span&gt;(error);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; エラー時の処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;それこそコールバック地獄になると、&lt;br &#x2F;&gt;
thenやcatchとかが使えず、&lt;br &#x2F;&gt;
ifとかで各コールバックのエラーを仕分けしなきゃならないので、&lt;br &#x2F;&gt;
文字通り地獄でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにPromiseの概念ですが、MDNでは、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Promise オブジェクトは、非同期処理の完了（もしくは失敗）の結果およびその結果の値を表します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Promise&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Promise&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ていう感じで説明されています。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798160276_1_20.jpg&quot; alt=&quot;独習JavaScript 新版 [ CodeMafia 外村 将大 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;独習JavaScript 新版 [ CodeMafia 外村 将大 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E7%8B%AC%E7%BF%92JavaScript%20%E6%96%B0%E7%89%88%20%5B%20CodeMafia%20%E5%A4%96%E6%9D%91%20%E5%B0%86%E5%A4%A7%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16903266&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;async-await&quot;&gt;async&#x2F;await&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんな便利なPromiseですが、&lt;br &#x2F;&gt;
実はもっとモダンな構文があります。&lt;&#x2F;p&gt;
&lt;p&gt;それが&lt;code&gt;async&#x2F;await&lt;&#x2F;code&gt; です&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;async&#x2F;awaitを使えば、Promiseチェーンとかをもっとすっきり書くことができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; sample&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;resolved&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    },&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  });&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; call&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;calling&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; sample&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(result);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; Expected output: &amp;quot;resolved&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;awaitを使えば、上記のコードの場合、&lt;br &#x2F;&gt;
sample関数が完了するまで待機します。&lt;&#x2F;p&gt;
&lt;p&gt;なので、実行してみると、&lt;br &#x2F;&gt;
resolvedという出力が最後にでることが確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;下記のコードみたいに、順番に実行することもできます。&lt;br &#x2F;&gt;
例えば、apiの呼び出しとかを前のapiの呼び出しが終わってからにしたい&lt;br &#x2F;&gt;
みたいなときにも重宝するでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;awaitを使う場合は、asyncキーワードも通常合わせて使用する必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; sequentialTasks&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; result1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;1つ目の処理完了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(result1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; result2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;2つ目の処理完了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(result2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;sequentialTasks&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;mark&gt;ちなみに、&lt;code&gt;Promise.all&lt;&#x2F;code&gt; を使うと、複数の非同期処理を並列に実行できるので、awaitでいちいち待つのではなく、並行してapiを叩きたいときとかは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;こちらが使えるでしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; parallelTasks&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; results&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;all&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理1完了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;((&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;resolve&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; setTimeout&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; resolve&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;処理2完了&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 500&lt;&#x2F;span&gt;&lt;span&gt;)),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ]);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(results);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; [&amp;quot;処理1完了&amp;quot;, &amp;quot;処理2完了&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;parallelTasks&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;javascriptwomotutoji-meruniha&quot;&gt;JavaScriptをもっと極めるには&lt;&#x2F;h2&gt;
&lt;p&gt;JavaScriptは、フロントエンドを実装するうえで&lt;br &#x2F;&gt;
もはや必須の言語といえますし、&lt;br &#x2F;&gt;
最初にプログラミング言語を学ぶとしたら、&lt;br &#x2F;&gt;
もっとも無難な選択肢といえるぐらい、&lt;br &#x2F;&gt;
良くも悪くも潰しが利くといえる言語でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そういうこともあり、&lt;br &#x2F;&gt;
みんななんとなくはJavaScriptを知ってはいるけど、&lt;br &#x2F;&gt;
そもそもの言語の歴史とか、&lt;br &#x2F;&gt;
他の言語と比べた特徴とかは意外と知らない人も多いのではないでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、そんなJavaScriptをもっと深めるためにおすすめの本を&lt;br &#x2F;&gt;
下記にリンクを張っておきます&lt;&#x2F;p&gt;
&lt;p&gt;よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;
&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
 
&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798160276_1_20.jpg&quot; alt=&quot;独習JavaScript 新版 [ CodeMafia 外村 将大 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;独習JavaScript 新版 [ CodeMafia 外村 将大 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E7%8B%AC%E7%BF%92JavaScript%20%E6%96%B0%E7%89%88%20%5B%20CodeMafia%20%E5%A4%96%E6%9D%91%20%E5%B0%86%E5%A4%A7%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16903266&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
 
&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774189673.jpg&quot; alt=&quot;Webフロントエンドハイパフォーマンスチューニング Webサイト・アプリケーションを徹底的に高速化 [ 久保田光則 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Webフロントエンドハイパフォーマンスチューニング Webサイト・アプリケーションを徹底的に高速化 [ 久保田光則 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Web%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%20Web%E3%82%B5%E3%82%A4%E3%83%88%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%BE%B9%E5%BA%95%E7%9A%84%E3%81%AB%E9%AB%98%E9%80%9F%E5%8C%96%20%5B%20%E4%B9%85%E4%BF%9D%E7%94%B0%E5%85%89%E5%89%87%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;14920954&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
 
&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784814400027_1_2.jpg&quot; alt=&quot;マイクロフロントエンド マイクロサービスアーキテクチャの概念をフロントエンドに拡張し、信頼性、自律性の高いシステムを構築する [ Luca Mezzalira ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;マイクロフロントエンド マイクロサービスアーキテクチャの概念をフロントエンドに拡張し、信頼性、自律性の高いシステムを構築する [ Luca Mezzalira ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%20%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%AE%E6%A6%82%E5%BF%B5%E3%82%92%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E3%81%AB%E6%8B%A1%E5%BC%B5%E3%81%97%E3%80%81%E4%BF%A1%E9%A0%BC%E6%80%A7%E3%80%81%E8%87%AA%E5%BE%8B%E6%80%A7%E3%81%AE%E9%AB%98%E3%81%84%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%20%5B%20Luca%20Mezzalira%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17284752&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Chainguardイメージとよく使用されるDockerイメージとの違い</title>
        <published>2024-07-31T00:00:00+00:00</published>
        <updated>2024-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/chainguard/"/>
        <id>https://reisuta.com/chainguard/</id>
        
        <content type="html" xml:base="https://reisuta.com/chainguard/">&lt;p&gt;Dockerのイメージの中で、&lt;br &#x2F;&gt;
サイズが小さくてセキュリティが高い印象を受ける有名どころとしては、&lt;br &#x2F;&gt;
Alpineなどがあるかと思いますが、&lt;br &#x2F;&gt;
もっとこれらに特化したイメージがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;それが本記事で取り上げるChainguardです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もしかすると、そこまで知名度があるわけではないかもしれませんが、&lt;br &#x2F;&gt;
イメージサイズとCVEの少なさは随一です。&lt;br &#x2F;&gt;
高度のセキュリティを誇ることが、Chainguardの特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなChainguardとは何か？から、&lt;br &#x2F;&gt;
実際に一般的なDockerイメージと比べた特徴を、&lt;br &#x2F;&gt;
脆弱性スキャンを行いつつハンズオンします。&lt;&#x2F;p&gt;
&lt;p&gt;日常的にDockerを使用していて、&lt;br &#x2F;&gt;
より良いDockerイメージを模索している人にとって、&lt;br &#x2F;&gt;
参考になれば幸いです。&lt;&#x2F;p&gt;
&lt;p&gt;そもそもDockerがよくわからんっていう人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;と動画で詳細に解説しているので、&lt;br &#x2F;&gt;
そちらを先にご覧になってからのほうが、&lt;br &#x2F;&gt;
本記事の理解がスムーズかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;Dockerとは何か？概要を完全解説 簡単なWebサーバー構築で基礎を学ぶ&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;QY6VVdlZxBQ&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;chainguardtohahe-ka-gai-yao-jie-shuo&quot;&gt;Chainguardとは何か？概要解説&lt;&#x2F;h2&gt;
&lt;p&gt;Chainguard(イメージ)は、Chainguard社によって提供されている、&lt;br &#x2F;&gt;
高いセキュリティを誇るコンテナイメージ群です。&lt;&#x2F;p&gt;
&lt;p&gt;dockerhubでChainguardと検索すると、&lt;br &#x2F;&gt;
500以上のイメージがヒットすることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;search?q=Chainguard&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;search?q=Chainguard&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Chainguardの特徴は、やはり従来のコンテナイメージの構築と運用に伴う&lt;br &#x2F;&gt;
セキュリティリスクを軽減していることでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;下記が公式のページです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.chainguard.dev&quot;&gt;https:&#x2F;&#x2F;www.chainguard.dev&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;0 CVE containerと打ち出していることからも分かる通り、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;セキュリティやコンテナイメージサイズの縮小などに強みを持った、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;イメージであることがわかります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、CVEというのは、&lt;br &#x2F;&gt;
Common Vulnerabilities and Exposures の略称で、共通脆弱性識別子と言ったりする、&lt;br &#x2F;&gt;
要するに脆弱性のリストのようなものかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sompocybersecurity.com&#x2F;column&#x2F;glossary&#x2F;cve&quot;&gt;https:&#x2F;&#x2F;www.sompocybersecurity.com&#x2F;column&#x2F;glossary&#x2F;cve&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.redhat.com&#x2F;ja&#x2F;topics&#x2F;security&#x2F;what-is-cve&quot;&gt;https:&#x2F;&#x2F;www.redhat.com&#x2F;ja&#x2F;topics&#x2F;security&#x2F;what-is-cve&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そんな脆弱性のリストが0ということからも分かる通り、&lt;br &#x2F;&gt;
Chainguardが一般的なDockerイメージと比べて高いセキュリティを誇っていることが伺えます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chainguardnosekiyuritei&quot;&gt;Chainguardのセキュリティ&lt;&#x2F;h3&gt;
&lt;p&gt;すでに述べたようにChainguardの大きな魅力は、&lt;br &#x2F;&gt;
そのセキュリティ機能です。&lt;&#x2F;p&gt;
&lt;p&gt;その中でも、Chainguardイメージは、&lt;br &#x2F;&gt;
&lt;mark&gt;Wolfiというアンディストリビューション(undistro)なOSをベースとしていることが&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;大きな特徴でしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;open-source&#x2F;wolfi&#x2F;overview&quot;&gt;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;open-source&#x2F;wolfi&#x2F;overview&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、distrolessなイメージとして、&lt;br &#x2F;&gt;
不要なソフトウェアが入っていないことも特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;chainguard&#x2F;chainguard-images&#x2F;getting-started-distroless&quot;&gt;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;chainguard&#x2F;chainguard-images&#x2F;getting-started-distroless&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Alpineとかを使ったことがある方は、&lt;br &#x2F;&gt;
コンテナサイズが小さい分、何も入っていないから、&lt;br &#x2F;&gt;
自分で結構色々インストールしなきゃいけなかったみたいない印象があるかもしれません。&lt;br &#x2F;&gt;
ChainguardイメージはそんなAlpineよりもさらに無駄が削ぎ落とされています。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、Chainguardは、下記のような特徴をもっています。&lt;br &#x2F;&gt;
(※公式のやつを訳して貼ってあるだけなので、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;chainguard&#x2F;chainguard-images&#x2F;overview&#x2F;&quot;&gt;公式の方&lt;&#x2F;a&gt;を見てもらったほうがいいかもです)&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;・不要なソフトウェアを排除したミニマルなデザイン&lt;br &#x2F;&gt;
・自動化ビルドにより、イメージの最新性と利用可能なセキュリティパッチを確保していること&lt;br &#x2F;&gt;
・イメージ内のすべてのアーティファクトの出所を証明する高品質のビルドタイム SBOM (ソフトウェア部品表)&lt;br &#x2F;&gt;
・Sigstore によって提供される検証可能な署名&lt;br &#x2F;&gt;
・Cosign と apko による再現可能なビルド&lt;&#x2F;p&gt;
&lt;p&gt;とまあ、基本的にはもともと不要なソフトウェアを排除したミニマルデザインなのに、&lt;br &#x2F;&gt;
その中でも使われている技術の信頼性は担保しているという、&lt;br &#x2F;&gt;
本当にセキュリティに特化しているなという印象を受けました。&lt;&#x2F;p&gt;
&lt;p&gt;こうした特徴から、Chainguardはセキュリティに特化していることはもちろん、&lt;br &#x2F;&gt;
コンテナサイズの縮小にも寄与したコンテナプラットフォームとして、非常に魅力的だと考えます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yokushi-yong-sarerudockerimezitohe-gawei-unoka&quot;&gt;よく使用されるDockerイメージと何が違うのか？&lt;&#x2F;h2&gt;
&lt;p&gt;さて、そんなChainguardですが、&lt;br &#x2F;&gt;
よく使用されるDockerイメージと何がどれぐらい違うのでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;なんとなくセキュリティがすごそうということはわかりましたが、&lt;br &#x2F;&gt;
まだいまいちイメージがわかないかと思うので、&lt;br &#x2F;&gt;
&lt;strong&gt;ここでRubyのChainguardイメージ、RubyのAlpineイメージ、一般的なRubyのDockerイメージの&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;3つのコンテナを立ててみようと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rubynoyi-ban-de-nadockerimezinohuan-jing-gou-zhu&quot;&gt;Rubyの一般的なDockerイメージの環境構築&lt;&#x2F;h3&gt;
&lt;p&gt;まずは、普通のDockerイメージの方を環境構築します。&lt;br &#x2F;&gt;
簡易的なもの(というか脆弱性スキャンがメイン)なので、&lt;br &#x2F;&gt;
今回はsinatraを使おうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まずは起動するapp.rbを作成します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;sinatra&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;set &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:bind&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;0.0.0.0&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;get &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;#39;Hello, from Docker!&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次にGemfileを作成します。&lt;br &#x2F;&gt;
sinatraだけだとエラーになるので、rackupも追加します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;source &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;https:&#x2F;&#x2F;rubygems.org&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gem &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;sinatra&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gem &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;rackup&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次にDockerfile.rubyを作成します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby:latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; bundle install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; . .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;CMD&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ruby&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;app.rb&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;まあよくあるDockerファイルの記法という感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、buildとrunをします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Dockerfile.ruby .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 5000:4567&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo-container ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;docker ps&lt;&#x2F;code&gt; を行って、問題なくコンテナが立ち上げっていればOKです&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rubynochainguardimezinohuan-jing-gou-zhu&quot;&gt;RubyのChainguardイメージの環境構築&lt;&#x2F;h3&gt;
&lt;p&gt;次にChainguardの方も環境構築します。&lt;&#x2F;p&gt;
&lt;p&gt;Gemfileとapp.rbは共通なので、&lt;br &#x2F;&gt;
Dockerfile.chainguardだけ作成します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cgr.dev&#x2F;chainguard&#x2F;ruby:latest-dev as builder&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; GEM_HOME=&#x2F;work&#x2F;vendor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; GEM_PATH=&lt;&#x2F;span&gt;&lt;span&gt;${GEM_PATH}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;:&#x2F;work&#x2F;vendor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile &#x2F;work&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; gem install bundler&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; bundle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cgr.dev&#x2F;chainguard&#x2F;ruby:latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; GEM_HOME=&#x2F;work&#x2F;vendor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ENV&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; GEM_PATH=&lt;&#x2F;span&gt;&lt;span&gt;${GEM_PATH}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;:&#x2F;work&#x2F;vendor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --from=builder&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;work&#x2F; &#x2F;work&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; app.rb &#x2F;work&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ENTRYPOINT&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;ruby&amp;quot;, &amp;quot;app.rb&amp;quot; ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、Chainguardの方ですが、&lt;br &#x2F;&gt;
こちらは少し書き方がトリッキーになります。&lt;br &#x2F;&gt;
普通のRubyイメージの書き方と同じようにすると、&lt;br &#x2F;&gt;
画像のようにshがない的なエラーになって&lt;br &#x2F;&gt;
bundle installとかができません。&lt;&#x2F;p&gt;
&lt;p&gt;これは最初にちらっと触れましたが、&lt;br &#x2F;&gt;
&lt;mark&gt;distrolessなイメージとして&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;シェルとかパッケージマネージャーも省かれている&lt;&#x2F;mark&gt;ので、&lt;br &#x2F;&gt;
まあ当然といえば当然ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chainguard&#x2F;059d8651a0ae380538370ea2204fffc9-1024x236.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なのでFROMでは、&lt;code&gt;cgr.dev&#x2F;chainguard&#x2F;ruby:latest&lt;&#x2F;code&gt; ではなくて、&lt;br &#x2F;&gt;
&lt;code&gt;cgr.dev&#x2F;chainguard&#x2F;ruby:latest-dev&lt;&#x2F;code&gt; を指定します。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これだけでもダメで、&lt;br &#x2F;&gt;
今度はrubyコマンドがない的なエラーにも遭遇するので、&lt;br &#x2F;&gt;
multi stage build構成にします。&lt;&#x2F;p&gt;
&lt;p&gt;この辺の詳細はこのあたりに書かれています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;chainguard&#x2F;chainguard-images&#x2F;getting-started&#x2F;ruby&quot;&gt;https:&#x2F;&#x2F;edu.chainguard.dev&#x2F;chainguard&#x2F;chainguard-images&#x2F;getting-started&#x2F;ruby&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;書きなれたDockerfileの記法とは少し異なる書き方が必要なので、&lt;br &#x2F;&gt;
このあたりは慣れが必要かもしれません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Dockerfile.chainguard .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 5001:4567&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; chainguard-ruby-demo-container chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、&lt;code&gt;docker ps&lt;&#x2F;code&gt; で無事立ち上がればOKです&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rubynoalpineimezinohuan-jing-gou-zhu&quot;&gt;RubyのAlpineイメージの環境構築&lt;&#x2F;h3&gt;
&lt;p&gt;さて、３つ目にAlpineの方も行おうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Gemfileとかapp.rbは同じく共通なので、&lt;br &#x2F;&gt;
Dockerfile.alpineをまず作成します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby:alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; bundle install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; . .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;CMD&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ruby&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;app.rb&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;alpineの場合、何か別途インストールしないとダメかなと思いましたが、&lt;br &#x2F;&gt;
意外にも普通のRubyイメージと同じ構成のDockerfileで問題なく立ち上がりました。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo-alpine&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Dockerfile.alpine .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 4567:4567&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo-alpine-container ruby-demo-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;何も入っていないように思えたAlpineも、&lt;br &#x2F;&gt;
比べてみるとまだ色々入っている方なのかもしれないと感じる瞬間でした&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ge-imezinocui-ruo-xing-sukiyan&quot;&gt;各イメージの脆弱性スキャン&lt;&#x2F;h2&gt;
&lt;p&gt;さて、各イメージの環境構築をしたので、&lt;br &#x2F;&gt;
脆弱性スキャンやイメージサイズを比較してみます。&lt;&#x2F;p&gt;
&lt;p&gt;まず、イメージのサイズを比較してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; images&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chainguard&#x2F;d35f07e843da304d7816ef78acf6cc2a.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一般的なRubyイメージが以下に巨大かが伺えますね。&lt;br &#x2F;&gt;
alpineも結構小さいですが、Chainguardはそれを更に上回ってサイズが小さいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;trivywoshi-tutacui-ruo-xing-sukiyan&quot;&gt;trivyを使った脆弱性スキャン&lt;&#x2F;h3&gt;
&lt;p&gt;次に、trivyを使用して、イメージのセキュリティスキャンも実行してみます&lt;br &#x2F;&gt;
trivyがなければ、homebrewとかでインストールしておきます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;aquasecurity&#x2F;trivy&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;aquasecurity&#x2F;trivy&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install trivy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;trivy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; image ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;trivy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; image chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;chainguard-ruby-demoが圧倒的に脆弱性が少ないことが伺えます&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;grypewoshi-tutacui-ruo-xing-sukiyan&quot;&gt;grypeを使った脆弱性スキャン&lt;&#x2F;h3&gt;
&lt;p&gt;grypeの方でも、脆弱性スキャンを行ってみようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;anchore&#x2F;grype&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;anchore&#x2F;grype&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;まずは公式に従ってcurlでインストールしときます&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -sSfL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;anchore&#x2F;grype&#x2F;main&#x2F;install.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -s -- -b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;usr&#x2F;local&#x2F;bin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とやってみたが、&lt;br &#x2F;&gt;
curlだと上手いことインストールできなかったので、&lt;br &#x2F;&gt;
homebrewでインストールしました。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tap anchore&#x2F;grype&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install grype&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;インストールしたら、早速スキャンしてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;grype&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;grype&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby-demo-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;grype&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ruby-demoの方は、&lt;br &#x2F;&gt;
CVEがたくさん出てきましたが、&lt;br &#x2F;&gt;
chainguard-ruby-demoの方は、&lt;br &#x2F;&gt;
&lt;strong&gt;なんと驚きの&lt;code&gt;No vulnerabilities found&lt;&#x2F;code&gt; でした。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(alpineもmediumが1つだけだったのでかなり少ない...!)&lt;&#x2F;p&gt;
&lt;p&gt;すごい！！&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chainguard&#x2F;60ce7c581bf18b3835dde92b04492bc3.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ていうか、これをやるまで&lt;br &#x2F;&gt;
知りませんでした、普通のRubyイメージの方は、&lt;br &#x2F;&gt;
gitとかpython3まで入っているんですね...&lt;br &#x2F;&gt;
(このgitに脆弱性があるようでしたが)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-scoutdenobi-jiao&quot;&gt;Docker Scoutでの比較&lt;&#x2F;h3&gt;
&lt;p&gt;もうtrivyやgrypeを使って比較したので、&lt;br &#x2F;&gt;
結果は見えていますが、&lt;br &#x2F;&gt;
最後にdockerhubのScoutを使って見ようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、dockerhubのアカウントを作成して、&lt;br &#x2F;&gt;
cliでログインします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; login&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次に、それぞれのイメージをタグ付けし、&lt;br &#x2F;&gt;
pushします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tag ruby-demo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tag ruby-demo-alpine&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;ruby-demo-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tag chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;ruby-demo-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; push&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;your-dockerhub-usernam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;chainguard-ruby-demo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;pushしたら、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;&quot;&gt;docker-hub&lt;&#x2F;a&gt;にアクセスします&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chainguard&#x2F;c0152bc8be027b8844fa61cec73281eb.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;chainguardの脆弱性は0でした。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;alpineでも5つぐらいありますね。&lt;br &#x2F;&gt;
普通のRubyイメージは115個...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerimezitobi-betachainguardnomei-li&quot;&gt;Dockerイメージと比べたChainguardの魅力&lt;&#x2F;h2&gt;
&lt;p&gt;本記事では、有名どころのDockerイメージと&lt;br &#x2F;&gt;
Chainguardイメージを主にイメージサイズと脆弱性の観点で&lt;br &#x2F;&gt;
比較してみました。&lt;&#x2F;p&gt;
&lt;p&gt;Chainguardイメージは、やはりその高いセキュリティと&lt;br &#x2F;&gt;
極限にまで縮小されたイメージサイズが特徴であり、&lt;br &#x2F;&gt;
それらが大きな魅力だと私は感じました。&lt;&#x2F;p&gt;
&lt;p&gt;何気なく使っている、Dockerの普通のイメージとかが、&lt;br &#x2F;&gt;
以下に肥大化したソフトウェアを内包していて、&lt;br &#x2F;&gt;
多くの脆弱性を抱えているかが本記事で明らかになったかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Chainguardは、日本語での情報がまだ多くはなく、&lt;br &#x2F;&gt;
通常のDockerfileに比べ、ややトリッキーな記法や、&lt;br &#x2F;&gt;
Wolfi OSやdistroless、undistroといった、&lt;br &#x2F;&gt;
人によっては馴染みが薄い概念も多くあるので、&lt;br &#x2F;&gt;
技術的キャッチアップコストは、通常のDockerイメージよりは大きくなるかもしれませんが、&lt;br &#x2F;&gt;
それを払ってでも、積極的に採用したい魅力的なDockerイメージだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事が、より良いDockerイメージの技術選定の参考になれば幸いです。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784295015895_1_2.jpg&quot; alt=&quot;Docker実践ガイド 第3版 （impress top gear） [ 古賀 政純 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Docker実践ガイド 第3版 （impress top gear） [ 古賀 政純 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Docker%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20%E7%AC%AC3%E7%89%88%20%EF%BC%88impress%20top%20gear%EF%BC%89%20%5B%20%E5%8F%A4%E8%B3%80%20%E6%94%BF%E7%B4%94%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17365463&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;軽量Alpine LinuxによるDockerコンテナ構築術 （TopGear） [ 中島能和 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E8%BB%BD%E9%87%8FAlpine%20Linux%E3%81%AB%E3%82%88%E3%82%8BDocker%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89%E8%A1%93%20%EF%BC%88TopGear%EF%BC%89%20%5B%20%E4%B8%AD%E5%B3%B6%E8%83%BD%E5%92%8C%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16729205&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【JavaScript概要】環境構築と変数について</title>
        <published>2024-06-08T00:00:00+00:00</published>
        <updated>2024-06-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/js_overview_variable/"/>
        <id>https://reisuta.com/js_overview_variable/</id>
        
        <content type="html" xml:base="https://reisuta.com/js_overview_variable/">&lt;p&gt;JavaScriptは、現在のウェブ開発において、&lt;br &#x2F;&gt;
欠かせないプログラミング言語の一つです。&lt;&#x2F;p&gt;
&lt;p&gt;フロントエンドからバックエンドまで幅広く使用されており、&lt;br &#x2F;&gt;
その汎用性と強力な機能が多くの開発者に支持されています。&lt;&#x2F;p&gt;
&lt;p&gt;Javaと名前が似ていますが、&lt;br &#x2F;&gt;
全く異なります。あるあるネタですが、&lt;br &#x2F;&gt;
JavaScriptを略してJavaと言ってはいけません。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptというと、&lt;br &#x2F;&gt;
誰もが知っている言語であるような気がしますが、&lt;br &#x2F;&gt;
&lt;strong&gt;実は色々掘り下げるとかなり複雑で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そこには深遠な世界が広がっています。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(ECMAScriptという名称と、2015年にリリースされたES6と、&lt;br &#x2F;&gt;
それ以降リリースされた、ECMAScriptの仕様としての、&lt;br &#x2F;&gt;
ES2016、ES2017、ES2018など...&lt;br &#x2F;&gt;
あとは実行環境としてブラウザとサーバの２つがあり、&lt;br &#x2F;&gt;
それぞれ特徴があることなど)&lt;&#x2F;p&gt;
&lt;p&gt;さらに、そのJavaScriptの周辺を渦巻くFWやビルドツールなども&lt;br &#x2F;&gt;
考慮するとフロントエンドは変化も早くかなり複雑怪奇なことでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、裏を返せばそれだけ複雑なJavaScriptの世界を知ることは、&lt;br &#x2F;&gt;
大きな武器になるということ。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;JavaScriptを深く知ることができれば、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;フロントエンド開発に強みを持てるだけでなく、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Node.jsとしてのバックエンド開発、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;React Nativeなどによるモバイル開発、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Electronによるデスクトップアプリ開発、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;さらにはGASなどによるGoogleツールの効率化スクリプトなどまで...&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;JavaScriptの可能性は無限大といっても過言ではないでしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなJavaScriptの基本的な概要と、&lt;br &#x2F;&gt;
実際に開発を始めるための環境構築、&lt;br &#x2F;&gt;
JavaScriptの文法として重要な変数について解説します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;javascriptnogai-yao&quot;&gt;JavaScriptの概要&lt;&#x2F;h2&gt;
&lt;p&gt;JavaScriptは、ブラウザ上で動作するスクリプト言語として&lt;br &#x2F;&gt;
Netscape社によって開発されました。&lt;&#x2F;p&gt;
&lt;p&gt;現在では、フロントエンド（クライアントサイド）とバックエンド（サーバーサイド）の両方で使用され、&lt;br &#x2F;&gt;
動的なウェブページの作成や、ウェブアプリケーションの開発に不可欠です。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptは動的型付け言語であり、変数の型を明示的に指定する必要がありません。&lt;&#x2F;p&gt;
&lt;p&gt;また、JavaScriptは、昨今の言語の中では珍しく、&lt;br &#x2F;&gt;
&lt;strong&gt;プロトタイプベースのオブジェクト指向でした。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、RubyやJavaとかに代表されるクラブベースのオブジェクト指向とは異なり、&lt;br &#x2F;&gt;
オブジェクトから新しいオブジェクトを作る手法で、&lt;br &#x2F;&gt;
他の言語だと、luaとかでもこれを採用していると思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;object&#x2F;prototype-based-programming#%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AF&quot;&gt;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;object&#x2F;prototype-based-programming#%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AF&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptのプロトタイプベースについては、&lt;br &#x2F;&gt;
詳しく話すとかなり複雑になるので、そちらはまた別の記事にて執筆します&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptでも、クラス定義をすることはできるようになったので、&lt;br &#x2F;&gt;
今となっては、純粋なプロトタイプベースなのかどうかは甚だ疑問ではありますが、&lt;br &#x2F;&gt;
JavaScriptのもともとの言語設計がプロトタイプベースというのは、&lt;br &#x2F;&gt;
大きな特徴の一つだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにプロトタイプベースについては、&lt;br &#x2F;&gt;
Wikipediaの解説が結構深く書かれており、&lt;br &#x2F;&gt;
個人的には面白かったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.wikipedia.org&#x2F;wiki&#x2F;%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9&quot;&gt;https:&#x2F;&#x2F;ja.wikipedia.org&#x2F;wiki&#x2F;%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;またJavaScriptというと、&lt;strong&gt;イベント駆動型プログラミング&lt;&#x2F;strong&gt;のイメージが強いかと思います。&lt;br &#x2F;&gt;
ユーザーの操作（クリックやキー入力など）に対して即座に反応するようなプログラミングを&lt;br &#x2F;&gt;
気軽に行うことができるのも特徴でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;おそらく最初にJavaScriptを学ぶときは、&lt;br &#x2F;&gt;
このイベントの処理とかに戸惑ったりするのかもしれません&lt;br &#x2F;&gt;
(私は初めてJavaScriptを学んだとき、配列やらオブジェクトやら型やらみたいな、&lt;br &#x2F;&gt;
所謂The プログラミングの文法というよりは、addEventListenerとかをひたすら書いていた記憶しかありません)&lt;&#x2F;p&gt;
&lt;p&gt;また、JavaScriptというと非同期処理のイメージも強いかもしれません。&lt;br &#x2F;&gt;
これも別にJavaScript固有の文法というわけではありませんが、&lt;br &#x2F;&gt;
言語によってはあってもあまり使わなかったりすることもある気もしますが、&lt;br &#x2F;&gt;
JavaScriptだと、API疎通などでほぼ必ず使う場面が出てくるので、&lt;br &#x2F;&gt;
使用頻度でいうと、もしかすると一番多いのではないのかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;とまあ、JavaScriptには多くの特徴がありました。&lt;br &#x2F;&gt;
一つ一つはJavaScript固有の特徴というわけではありませんが、&lt;br &#x2F;&gt;
すべてを包含した、&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;動的型付け&lt;&#x2F;li&gt;
&lt;li&gt;プロトタイプベースオブジェクト指向&lt;&#x2F;li&gt;
&lt;li&gt;イベント駆動型プログラミングの使用頻度&lt;&#x2F;li&gt;
&lt;li&gt;非同期処理の使用頻度&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;という4つの特徴を持つ言語はそんなにはない気がします。&lt;&#x2F;p&gt;
&lt;p&gt;それにJavaScriptの文法も詳しく紐解いていくと、&lt;br &#x2F;&gt;
これ以外にも結構面白い特徴があったりして、&lt;br &#x2F;&gt;
JavaScriptはその著名さに対して、&lt;br &#x2F;&gt;
結構マニアックな文法だったりとそのギャップが個人的には結構面白いと感じております。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;javascriptwoshi-su-huan-jing-gou-zhu&quot;&gt;【JavaScriptを試す】環境構築&lt;&#x2F;h3&gt;
&lt;p&gt;さて、大まかにJavaScriptの特徴に触れたので、&lt;br &#x2F;&gt;
実際に少し書いてためしてみようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptを実行する方法として、&lt;br &#x2F;&gt;
大きく二つの方法があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;一つは、開発者ツールのコンソールでコードを入力することと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;もう一つはNode.jsをインストールして、nodeコマンドなどで対話モードを&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;起動させることです&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;780191ce180b9bf6c3a5af05e1c51559-1024x324.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;78b3e5d5bb7e95c1247e7229cd60ed5f.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;まあ、一般的にはコンソールに直接打ち込んで、&lt;br &#x2F;&gt;
実行するなんてことはほとんどしないのですが、&lt;br &#x2F;&gt;
ちょっとした文法を試すぐらいの用途でしたらいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;手順としては、ブラウザを開いて、ウェブページ上で右クリックし、「検証」を選択。(MacならCmd + Option + Iでも開けます)&lt;br &#x2F;&gt;
「コンソール」タブを選択したら、コンソールに以下のようなコードを入力して、JavaScriptを試すことができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;Hello, JavaScript!&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;もう一つの実行方法としては、&lt;br &#x2F;&gt;
こちらはやはり定番のローカルでの環境構築です。&lt;&#x2F;p&gt;
&lt;p&gt;より本格的な開発を行うためには、必須になるでしょう。&lt;br &#x2F;&gt;
基本的な手順としては、エディタのインストールと、Node.jsのインストールがあります。&lt;&#x2F;p&gt;
&lt;p&gt;エディタについては、&lt;br &#x2F;&gt;
お好きなものを使用するのが良いとは思いますが、&lt;br &#x2F;&gt;
私は別の記事や動画でNeovimやVimを推奨しているので、&lt;br &#x2F;&gt;
興味がある人は&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt; や動画もご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;Node.jsのインストールについては、&lt;br &#x2F;&gt;
Node.jsの公式サイトにサクセスしてダウンロードするというやり方でも良いのですが、&lt;br &#x2F;&gt;
Node.jsのバージョンは結構切り替えたりすることも多いので、&lt;br &#x2F;&gt;
個人的には、nvmなどのバージョン管理ツールの導入をおすすめします。&lt;&#x2F;p&gt;
&lt;p&gt;nvmの導入手順については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;typescript-build&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;で解説しております。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;13&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;Node.jsは、JavaScriptの実行環境であり、&lt;br &#x2F;&gt;
バックエンド開発でも使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;下記のコマンドをターミナルで打って、&lt;br &#x2F;&gt;
バージョンが表示されていれば問題ないです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;node&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;expreeedejian-yi-sabali-tetemiru&quot;&gt;Expreeeで簡易サーバー立ててみる&lt;&#x2F;h3&gt;
&lt;p&gt;さて、Node.jsもインストールしたので、&lt;br &#x2F;&gt;
せっかくなので、Node.jsフレームワークのExpressを使って、&lt;br &#x2F;&gt;
簡単なバックエンドサーバーを立ててみようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、適当なディレクトリに移動して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; init&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を実行して、package.jsonを作成します。&lt;&#x2F;p&gt;
&lt;p&gt;次にExpressをインストールします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install express&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;node_modulesが作成されて、&lt;br &#x2F;&gt;
package-lock.jsonが作成されていれば、&lt;br &#x2F;&gt;
無事インストールされているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;早速、サーバーを起動するファイルを作成しましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;touch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; app.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;作成したら、app.jsを下記のように編集します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; express&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;express&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; express&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3010&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;get&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&#x2F;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;req&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; res&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  res.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;send&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Hello, World!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;listen&lt;&#x2F;span&gt;&lt;span&gt;(port, ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`Server is running at http:&#x2F;&#x2F;localhost:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;port&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;あとは、このapp.jsを実行するだけです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;node&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; app.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;http:&#x2F;&#x2F;localhost:3010 にアクセスしたら、&lt;br &#x2F;&gt;
Hello Worldが表示されているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、上記のコードの、&lt;br &#x2F;&gt;
&lt;code&gt;require(&#x27;express&#x27;)&lt;&#x2F;code&gt; という記法は、CommonJSの記法で、&lt;br &#x2F;&gt;
Node.jsではこちらの記法が一般的かと思います(とはいえ最近はESModulesに流れつつあるので、&lt;br &#x2F;&gt;
正直この辺りは今後どうなるかはよくわからない)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&#x2F;api&#x2F;modules.html&quot;&gt;https:&#x2F;&#x2F;nodejs.org&#x2F;api&#x2F;modules.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一方で、ブラウザ上で実行するJavaScriptである、&lt;br &#x2F;&gt;
ESModulesは、&lt;code&gt;import&lt;&#x2F;code&gt; などでモジュールを取り込むのが一般的な文法です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;実はNode.jsとブラウザのJSはこれ以外にも色々違いがあって、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;グローバルオブジェクトは、ブラウザにおいてはWindowオブジェクト、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;Nodeにおいては、globalオブジェクトとなります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Global_object&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Glossary&#x2F;Global_object&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;JavaScriptには、主にCommonJsとESModuleの二つの&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;モジュールシステムが存在します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これもJavaScriptの周辺世界が、しばしばカオスといわれる所以だと個人的には感じます&lt;&#x2F;p&gt;
&lt;p&gt;これも踏まえると、JavaScriptとは、&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;動的型付け&lt;&#x2F;li&gt;
&lt;li&gt;プロトタイプベースオブジェクト指向&lt;&#x2F;li&gt;
&lt;li&gt;イベント駆動型プログラミングの使用頻度&lt;&#x2F;li&gt;
&lt;li&gt;非同期処理の使用頻度&lt;&#x2F;li&gt;
&lt;li&gt;CommonJSとESModule二つのモジュールシステムの存在&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;という実に複雑な歴史的背景を内包した一筋縄ではいかない言語に思えてきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bian-shu-toding-shu&quot;&gt;変数と定数&lt;&#x2F;h2&gt;
&lt;p&gt;さて、JavaScriptの概要説明が長引いてしまったので、&lt;br &#x2F;&gt;
ここらで一旦、シンプルに文法の話をしようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、定番ですが、変数と定数について解説します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、TypeScirptの変数については、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-variable&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;でも解説しているので、&lt;br &#x2F;&gt;
よろしければご参考ください&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;21&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;let-const-var&quot;&gt;let, const, var&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そもそも変数とは何かというと、&lt;br &#x2F;&gt;
しばしば下記の画像のように値をいれる箱と言及される事が多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;609a0d676136756659fc7f58cf2a0867.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、Piという変数に3.14という値をいれるので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; Pi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3.14&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにして変数を定義します。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptでは、こうした変数定義として&lt;br &#x2F;&gt;
&lt;mark&gt;主にletとconstを使って変数や定数を宣言します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; test;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; test2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; test3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;test変数のように、宣言だけで初期値を代入しないこともできます。&lt;br &#x2F;&gt;
その場合、undefinedが入ります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;letは変数なのに対し、constは定数なので、&lt;br &#x2F;&gt;
初期化する必要があり、値を変更することができません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、constは定数なので、&lt;br &#x2F;&gt;
本来は変数ではないのですが、&lt;br &#x2F;&gt;
JavaScriptにおける変数定義という文脈では、&lt;br &#x2F;&gt;
このconstを使用することが一番多いです。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、プログラム実行中に変化しない変数も、&lt;br &#x2F;&gt;
constとして定義し、可能な限りconstで定義するという考え方です。&lt;&#x2F;p&gt;
&lt;p&gt;一方で、定数本来の意味に立ちかえって、&lt;br &#x2F;&gt;
変数はlet、定数(例えば円周率のように基本的には変わりようがないようもの)はconstという&lt;br &#x2F;&gt;
ふうに書くみたいな考え方もあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;どちらが一概に良いかは難しいですが、&lt;br &#x2F;&gt;
個人的には、&lt;strong&gt;letで定義するということは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;その変数がどこかで書き換わる可能性があるということを示唆するため、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;可能な限り、constで定義して、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;変わるものだけletで定義するやり方のほうが可読性が高くなるのではないかなと感じます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;var&quot;&gt;var&lt;&#x2F;h4&gt;
&lt;p&gt;さて、基本的にES6以降においては、&lt;br &#x2F;&gt;
JavaScriptの変数・定数定義はletかconstを使用すればいいのですが、&lt;br &#x2F;&gt;
ES6より前では、変数宣言にvarというものを使っていました。&lt;&#x2F;p&gt;
&lt;p&gt;今から書くプログラムにvarを使う必要は基本的にはありませんが、&lt;br &#x2F;&gt;
古いコードとかには時々見かけることもあるので、&lt;br &#x2F;&gt;
varの特徴と注意点について触れておこうと思います。&lt;br &#x2F;&gt;
※スコープの説明を含むため、先に本記事のスコープについての説明(varの次の節)を&lt;br &#x2F;&gt;
読んでからのほうが理解が進むかもしれません。&lt;&#x2F;p&gt;
&lt;h5 id=&quot;guan-shu-sukopu&quot;&gt;関数スコープ&lt;&#x2F;h5&gt;
&lt;p&gt;varで宣言された変数は、関数スコープを持ちます。&lt;br &#x2F;&gt;
これは、変数が関数内であればどこでもアクセス可能であることを意味します。&lt;&#x2F;p&gt;
&lt;p&gt;ブロックスコープ（例えば、if文やforループ内）では新しいスコープが作られません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;        var&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 同じスコープ内の変数を再定義&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2になってしまう&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ifブロック内でxを再定義すると、外側のxも変更されます。&lt;&#x2F;p&gt;
&lt;p&gt;letとかで定義すると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;        let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; このブロックスコープ内でのみ有効な新しい変数&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; もとの1が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;しっかりスコープが保たれているのがわかります&lt;&#x2F;p&gt;
&lt;h5 id=&quot;bian-shu-nojuan-kishang-ge-hoisting&quot;&gt;変数の巻き上げ（Hoisting）&lt;&#x2F;h5&gt;
&lt;p&gt;varで宣言された変数は、変数の巻き上げ（hoisting）の対象となります。&lt;br &#x2F;&gt;
これは、変数の宣言がそのスコープの先頭に移動されることを意味します。&lt;&#x2F;p&gt;
&lt;p&gt;ただし、値の代入は元の位置に残ります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; undefined&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; Hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;つまり、変数宣言だけ先頭にされて、&lt;br &#x2F;&gt;
代入は、元の位置で行われるという感じなので、&lt;br &#x2F;&gt;
最初のconsole.logではundefinedが出力される感じです&lt;br &#x2F;&gt;
(これ自体はletで初期値を代入しないで宣言だけしたときにundefinedが入るのと似てますね)&lt;&#x2F;p&gt;
&lt;h5 id=&quot;gurobaruobuziekutonopuropatei&quot;&gt;グローバルオブジェクトのプロパティ&lt;&#x2F;h5&gt;
&lt;p&gt;グローバルスコープでvarを使って宣言された変数は、&lt;br &#x2F;&gt;
グローバルオブジェクト（ブラウザ環境ではwindow）のプロパティとして扱われます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; globalVar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;global var&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(window.globalVar);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; global var&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そのため、意図せずライブラリのグローバルオブジェクトのプロパティなどと&lt;br &#x2F;&gt;
名前衝突してしまい、複雑なエラーになったりするおそれがありそうです。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、varでの宣言は、&lt;br &#x2F;&gt;
&lt;code&gt;globalThis.test = &#x27;hello&#x27; &lt;&#x2F;code&gt; みたいな記法と酷似します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bian-shu-toding-shu-nosukopu&quot;&gt;変数と定数のスコープ&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;変数がどこまで有効かといった、その有効範囲を&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;スコープといいます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;letやconstについては、それらが宣言された、&lt;br &#x2F;&gt;
ブロック内で有効となるブロックスコープを持ちますが、&lt;br &#x2F;&gt;
varはブロックスコープを持ちません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; blockVar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;I am not a block-scoped variable&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; blockLet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;I am a block-scoped variable&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; blockConst&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;I am a block-scoped constant&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockVar);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; I am not a block-scoped variable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockLet);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; I am a block-scoped variable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockConst);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; I am a block-scoped constant&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockLet);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ReferenceError: blockLet is not defined&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockConst);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ReferenceError: blockConst is not defined&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(blockVar);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 値が読み取れてしまう&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;基本的に、letやconstについては、&lt;br &#x2F;&gt;
このようにブロックスコープを持っているので、&lt;br &#x2F;&gt;
スコープ毎に同じ名前の変数を定義したとしても、&lt;br &#x2F;&gt;
それらは別の値を参照します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; グローバルスコープ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ===&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ブロックスコープなので別の値を参照できる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; グローバルスコープの値が出力される 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 同一スコープ(この場合グローバルスコープ)での再宣言はエラーになる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;なので、関数スコープと合わせると、&lt;br &#x2F;&gt;
下記のようなコードも書こうと思えばかけます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;var&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; グローバルスコープ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 関数スコープ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    var&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;varの変数です&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    let&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;letの変数です&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;constです&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; varの変数です &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; letの変数です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(z);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; constです&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ブロックスコープ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      var&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      let&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 300&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(z)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 300&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    } &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; varはブロックスコープを持たないので100が出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ブロックスコープを持つので、関数スコープのletの変数ですが出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(z);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; ブロックスコープを持つので、関数スコープのconstですが出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; varも関数スコープは持っているのでグローバルスコープのtrueが出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(y)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(z)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;letとconstがそれぞれのスコープ毎に値を保持している(有効範囲を保持している)のに対し、&lt;br &#x2F;&gt;
varはブロックスコープを持たないので、ブロックスコープでの宣言が、&lt;br &#x2F;&gt;
関数スコープにまで影響してしまっています。&lt;&#x2F;p&gt;
&lt;p&gt;また、同一スコープでの再宣言はエラーになるのですが、&lt;br &#x2F;&gt;
varの場合、エラーにならないので、その特徴も相まって、&lt;br &#x2F;&gt;
ブロックスコープでの再宣言が上書きのような挙動になっているように思えます&lt;&#x2F;p&gt;
&lt;p&gt;下記の画像のようにvarだと再宣言ができてしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;js_overview_variable&#x2F;d907f595333e9549cf9214abef3f07df-1024x430.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;node.jsの対話型モード&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fen-ge-dai-ru&quot;&gt;分割代入&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;分割代入は、配列やオブジェクトから複数のプロパティや要素を一度に取り出し、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;変数に割り当てるための便利な構文です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;やや応用的な文法ですが、&lt;br &#x2F;&gt;
地味に結構使うので覚えておいたほうが良いと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;pei-lie-nofen-ge-dai-ru&quot;&gt;配列の分割代入&lt;&#x2F;h4&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 配列の分割代入&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first, second, third]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; array;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(second);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(third);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このあたりは、まだ直感的ですが、&lt;br &#x2F;&gt;
必ずしも、変数と値の数を合わせなくても代入できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; array&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 2番目の要素をスキップ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first, , third, fourth]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; array;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(third);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(fourth);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; 逆に要素が足りないときはundefinedが入る&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; array2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first2, second2, third2]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; array2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(second2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(third2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; undefined&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;...を使うと残りの値を一つの変数に集めることもできます&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; array3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first3,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ...&lt;&#x2F;span&gt;&lt;span&gt;second3]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; array3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first3)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(second3)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; [2,3,4,5]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;ちなみに配列の分割代入は代入するものは配列でなくてもいい&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first4,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ...&lt;&#x2F;span&gt;&lt;span&gt;rest]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first4)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; H&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(rest)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; [&amp;#39;e&amp;#39;, &amp;#39;l&amp;#39;, &amp;#39;l&amp;#39;, &amp;#39;o&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、undefinedが入らないように、&lt;br &#x2F;&gt;
デフォルト値を入れることもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; array2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; [first2, second2, third2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; array2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(first2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(second2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(third2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;obuziekutonofen-ge-dai-ru&quot;&gt;オブジェクトの分割代入&lt;&#x2F;h4&gt;
&lt;p&gt;配列の分割代入も便利ですが、&lt;br &#x2F;&gt;
個人的にはこちらのオブジェクトの分割代入のほうが&lt;br &#x2F;&gt;
使用頻度や遭遇頻度は高い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトの分割代入では、オブジェクトのプロパティを変数に割り当てることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;John&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt; };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; オブジェクトの分割代入&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; { name, age }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; obj;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(name);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; John&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(age);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 30&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;オブジェクトの分割代入について、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;変数名とプロパティ名は同じにする必要があります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
例えば、上記のコードで変数宣言を&lt;code&gt;const { name2, age2 } = obj &lt;&#x2F;code&gt; とかにすると、&lt;br &#x2F;&gt;
これらにはundefinedが入ります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、分割代入において、&lt;br &#x2F;&gt;
変数に別名を付けたいときは下記のように記述します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;John&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt; };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; オブジェクトの分割代入&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; { name: firstName, age: thirty }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; obj;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(firstName);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; John&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(thirty);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; 30&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、このオブジェクトの分割代入と別名宣言は、&lt;br &#x2F;&gt;
Nuxt3のuseAsyncDataやuseFetchとかで頻繁に出てきます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; { data: discounts, pending }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; useAsyncData&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;cart-discount&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; async&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; [coupons, offers]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Promise&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;all&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    $fetch&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&#x2F;cart&#x2F;coupons&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    $fetch&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&#x2F;cart&#x2F;offers&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; { coupons, offers }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、dataというプロパティにdiscountsという別名を付けています。&lt;br &#x2F;&gt;
また、async関数の中でも配列の分割代入を使っており、&lt;br &#x2F;&gt;
このようにフレームワークの関数とかを使うときは、&lt;br &#x2F;&gt;
分割代入は結構よく出てくるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptについては、&lt;br &#x2F;&gt;
下記の本が非常に体系的に書かれており、&lt;br &#x2F;&gt;
詳しく学ぶことができるので、&lt;br &#x2F;&gt;
JavaScriptを極めたいと思っている人には、&lt;br &#x2F;&gt;
非常におすすめの一冊です。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>エンジニアにおけるプロダクト志向と技術志向について</title>
        <published>2024-04-07T00:00:00+00:00</published>
        <updated>2024-04-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/product_oriented/"/>
        <id>https://reisuta.com/product_oriented/</id>
        
        <content type="html" xml:base="https://reisuta.com/product_oriented/">&lt;p&gt;エンジニアのキャリアを考える上で、&lt;br &#x2F;&gt;
しばしば話題になる、&lt;br &#x2F;&gt;
プロダクト志向と技術志向の問題。&lt;&#x2F;p&gt;
&lt;p&gt;自分がどちらの志向性なのかによっても、&lt;br &#x2F;&gt;
Sierにいくべきか、自社サービスに行くべきかといったことも、&lt;br &#x2F;&gt;
変わってくると思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、この２つについて考察してみたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;strong-engineer&#x2F;&quot;&gt;以前の記事&lt;&#x2F;a&gt;で強強エンジニアについて解説しましたが、&lt;br &#x2F;&gt;
こちらは本記事でいうところの、技術志向のエンジニアの強強エンジニアとも言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;strong-engineer&quot;&gt;【強強エンジニアになるための習慣】技術力を高める方法&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;fxRqutJa8TE&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;※その点、プロダクト志向の強強エンジニアは、&lt;br &#x2F;&gt;
また別の強みが要求されるでしょう。&lt;br &#x2F;&gt;
(わかりやすいものでいうと、Bizへの要件定義能力と、&lt;br &#x2F;&gt;
提案力や、Bizやプロダクトへの深い理解と、それらの課題を解決するための最低限の技術力など)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;purodakutozhi-xiang-toji-shu-zhi-xiang-toha&quot;&gt;プロダクト志向と技術志向とは？&lt;&#x2F;h2&gt;
&lt;p&gt;そもそもプロダクト志向と、技術志向は、&lt;br &#x2F;&gt;
その名の通り、そのプロダクトに対する関心が強いか、&lt;br &#x2F;&gt;
またはプロダクトよりも技術への関心が強いかといった、&lt;br &#x2F;&gt;
&lt;strong&gt;個々のエンジニアの興味関心の志向性&lt;&#x2F;strong&gt;のことをいうかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;一般的に、プロダクト志向は、&lt;br &#x2F;&gt;
サービスに対する愛が強く、&lt;br &#x2F;&gt;
そのサービスをより成長させていくためにはどうしたらいいか、&lt;br &#x2F;&gt;
ユーザーにもっと使ってもらうにはどうしたらいいか、&lt;br &#x2F;&gt;
自分が実装した機能がどうユーザーに跳ね返るか、&lt;br &#x2F;&gt;
自分が実装した機能がどう営業利益に結びつくかといったことに&lt;br &#x2F;&gt;
興味関心が強いことが多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それに比べ、どういう技術を使いたいとか、&lt;br &#x2F;&gt;
技術選定とかアーキテクチャはどうしたらいいかといった、&lt;br &#x2F;&gt;
技術の詳細にはこだわりがないことが多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、技術志向は、これの逆で、&lt;br &#x2F;&gt;
サービスに対する思い入れが強いわけではなく、&lt;br &#x2F;&gt;
興味関心は、興味深い最新技術を使うことや、&lt;br &#x2F;&gt;
アーキテクチャを選定することや、&lt;br &#x2F;&gt;
内部実装を洗練させてパフォーマンスを上げて行くなど、&lt;br &#x2F;&gt;
技術的な課題についての興味関心が強いことが多く、&lt;br &#x2F;&gt;
そのプロダクトが実際に成長していくかどうかや、&lt;br &#x2F;&gt;
営業利益にどう結びつくかといったBiz的なことには、&lt;br &#x2F;&gt;
興味が薄いことが多いかと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;purodakutozhi-xiang-noenzinia&quot;&gt;プロダクト志向のエンジニア&lt;&#x2F;h2&gt;
&lt;p&gt;さて、これらを踏まえて改めて、&lt;br &#x2F;&gt;
プロダクト志向のエンジニアとはなにか？&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;プロダクト志向のエンジニアは、基本的にBizに興味がある人が多く、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;営業利益にどう結びつくかといったことへの関心が強いことが多いので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;基本的にBizからは歓迎されるし、評価もされやすいでしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、上長がBizの場合、&lt;br &#x2F;&gt;
プロダクト志向のエンジニアは評価を得やすいでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そして、そもそも論として、&lt;br &#x2F;&gt;
&lt;strong&gt;技術力は何らかの課題解決の手段として存在する&lt;&#x2F;strong&gt;という側面は、&lt;br &#x2F;&gt;
どうしても否めないため、その点においてプロダクト志向というのは、&lt;br &#x2F;&gt;
ある種最も素直な志向性とも言えるため、&lt;br &#x2F;&gt;
キャリアとしても最も無難な選択だと私は感じます。&lt;&#x2F;p&gt;
&lt;p&gt;特に自社サービス、事業会社において、&lt;br &#x2F;&gt;
&lt;strong&gt;プロダクト志向は、ある種必須&lt;&#x2F;strong&gt;の一面もあるので、&lt;br &#x2F;&gt;
仮に技術志向であったとしても、&lt;br &#x2F;&gt;
プロダクト志向の側面も必ず必要になってくるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;自社サービスは、そのサービスをいかに大きくし、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;いかに営業利益を伸ばしていき、そのサービスで&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;missionの課題を解決していくかということを重要視している&lt;&#x2F;mark&gt;ので、&lt;br &#x2F;&gt;
その企業に雇われているエンジニアが、プロダクト志向ではないというのは、&lt;br &#x2F;&gt;
ある種致命的になりうることもあります。&lt;&#x2F;p&gt;
&lt;p&gt;技術力に定評がある、自社サービス企業も、&lt;br &#x2F;&gt;
他の自社サービスに比べると、&lt;br &#x2F;&gt;
技術志向も重視するかもしれませんが、&lt;br &#x2F;&gt;
それでもプロダクト志向が抜きのエンジニアは、&lt;br &#x2F;&gt;
かなり厳しいことになりうるのと、&lt;br &#x2F;&gt;
仮に採用されても、本人がそのプロダクトに愛着を持てないと、&lt;br &#x2F;&gt;
なかなか厳しいと思います&lt;br &#x2F;&gt;
(異動とかがない限り、基本的にそのプロダクトをずっとメンテナンスしていくことになるため、&lt;br &#x2F;&gt;
やりがいを感じにくくなるのではないかという懸念が残ります)&lt;&#x2F;p&gt;
&lt;p&gt;ここまで読むとプロダクト志向のエンジニアは、&lt;br &#x2F;&gt;
完璧のようにも思えますが、懸念点もあります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;purodakutozhi-xiang-noenzinianoxuan-nian-dian&quot;&gt;プロダクト志向のエンジニアの懸念点&lt;&#x2F;h3&gt;
&lt;p&gt;ずばり、技術に関心がなさすぎる場合です。&lt;&#x2F;p&gt;
&lt;p&gt;結局のところ、プロダクト志向を突き詰めすぎてしまい、&lt;br &#x2F;&gt;
技術に対する関心を失ってしまったら、&lt;br &#x2F;&gt;
それはもはやエンジニアではなくBiz職になってしまうという問題があります。&lt;&#x2F;p&gt;
&lt;p&gt;わかりやすい例でいうと、&lt;br &#x2F;&gt;
Bizの人がちょっとかじった程度のGASやPython使って、&lt;br &#x2F;&gt;
メンテナンスしづらいコードを量産してしまい、&lt;br &#x2F;&gt;
手に負えなくなってしまったりという、&lt;br &#x2F;&gt;
技術的関心がなさすぎることにより起こる、&lt;br &#x2F;&gt;
技術的負債などでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;こういったことは、プロダクト志向が強すぎるエンジニアにも当てはまるかもしれません。&lt;br &#x2F;&gt;
(例えば直近のBizの課題を解決できれば問題ないと、あまりに冗長なコードを使ったり、&lt;br &#x2F;&gt;
コピペでソースコードを使ってしまったりなど)&lt;&#x2F;p&gt;
&lt;p&gt;なので、プロダクト志向のエンジニアも、&lt;br &#x2F;&gt;
結局のところ、エンジニアであるということを忘れず、&lt;br &#x2F;&gt;
自身の技術的興味関心を追求することを、&lt;br &#x2F;&gt;
やめてはいけないということがあるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;product_oriented&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-shu-zhi-xiang-noenzinia&quot;&gt;技術志向のエンジニア&lt;&#x2F;h2&gt;
&lt;p&gt;さて、プロダクト志向のエンジニアに対して、&lt;br &#x2F;&gt;
技術志向のエンジニアは、&lt;br &#x2F;&gt;
わかりやすく技術バカと言う感じの人が多く、&lt;br &#x2F;&gt;
いわゆるエンジニアっぽい人が多い印象です。&lt;&#x2F;p&gt;
&lt;p&gt;アーキテクチャ探求や、最新の技術などが好きだったり、&lt;br &#x2F;&gt;
それらを使う手段としてプロダクト開発を行っているという、&lt;br &#x2F;&gt;
思考の人が多いかもしれません。(私もどちらかというとこちら寄りのエンジニアです)&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、企業にもよるとは思いますが、&lt;br &#x2F;&gt;
あまりに技術志向に振り切っているエンジニアは、&lt;br &#x2F;&gt;
自社サービスとか事業会社では、評価されにくいです。&lt;&#x2F;p&gt;
&lt;p&gt;それは、すでにプロダクト志向のエンジニアのところで述べた通り、&lt;br &#x2F;&gt;
サービスへの興味関心がないと、&lt;br &#x2F;&gt;
かなりの技術力があるとかでない限り、&lt;br &#x2F;&gt;
Bizとしても評価しづらいからでしょう。&lt;br &#x2F;&gt;
(自社サービスのカルチャー的にも、そのサービスに対する愛はかなり重視されるので、&lt;br &#x2F;&gt;
そういうものがない人は、カルチャー的にも冷遇されやすい気がします)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、基本的に技術志向のエンジニアは、&lt;br &#x2F;&gt;
Sierなどが向いていると思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ji-shu-zhi-xiang-noenzinianowen-ti-dian&quot;&gt;技術志向のエンジニアの問題点&lt;&#x2F;h3&gt;
&lt;p&gt;これもずばり、Bizへの理解と興味がなさすぎることに尽きるでしょう。&lt;br &#x2F;&gt;
結局のところ、利益を出すには、そのサービスを大きくしたりと、&lt;br &#x2F;&gt;
少なからずBiz的要素が不可欠になるので、&lt;br &#x2F;&gt;
そのあたりへの視点がないとかなり偏ってしまいますし、&lt;br &#x2F;&gt;
どこかで頭打ちになる懸念があります。&lt;&#x2F;p&gt;
&lt;p&gt;また、&lt;strong&gt;技術志向の最大の懸念点は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;戦う土壌が良くないというのもあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;世の中、技術力が高いエンジニアは、&lt;br &#x2F;&gt;
死ぬほど存在します。&lt;&#x2F;p&gt;
&lt;p&gt;技術志向を突き通すということは、&lt;br &#x2F;&gt;
ある意味、それらの歴戦のエンジニアを相手にしても、&lt;br &#x2F;&gt;
自身の技術力のみでアピールできなくてはならないということです。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、それだけの自信がある人は、&lt;br &#x2F;&gt;
それに挑戦するのもありだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ多くの人にとって、これは必ずしもいい選択とは言えないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;それに加え、最近では生成AIなどの台頭で、&lt;br &#x2F;&gt;
単純なコーディングができるだけでは淘汰されやすい時代が突入しており、&lt;br &#x2F;&gt;
将来的には技術志向と生成AIは領域が衝突する懸念もあるため、&lt;br &#x2F;&gt;
この点においても、戦う土壌が良いとは言い難いといえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;それに技術の進化は早い事に加え、&lt;br &#x2F;&gt;
現時点での技術的興味関心がずっと続くとは限らず、&lt;br &#x2F;&gt;
いつか技術に飽きる日が来るかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;技術志向は、そういった際のリスクヘッジが非常にしにくく、&lt;br &#x2F;&gt;
その点でかなり限られた人しかできないキャリアのような気もしています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-ju-dotiragaiinoka&quot;&gt;結局どちらがいいのか？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;blog.takehata-engineer.com&#x2F;entry&#x2F;want-disappear-technology-oriented-and-product-oriented&quot;&gt;こちらの記事&lt;&#x2F;a&gt;と似たような結論になってしまいますが、&lt;br &#x2F;&gt;
結局のところ、どちらか片方ではだめだということを前提としても、&lt;br &#x2F;&gt;
プロダクト志向のエンジニアの方が、賢い（というより器用）な生き方なような気はしています。&lt;&#x2F;p&gt;
&lt;p&gt;結局のところ、プロダクト志向は、&lt;br &#x2F;&gt;
仮にSierとかに行ったとしても、&lt;br &#x2F;&gt;
持っていて損にはなりませんし、&lt;br &#x2F;&gt;
基本的にデメリットは技術的好奇心を失わないように気をつけたいということにあるので、&lt;br &#x2F;&gt;
ある種心がけ次第でなんとでもできる領域だとも思います。&lt;&#x2F;p&gt;
&lt;p&gt;過度にプロダクト志向に寄せる必要はありませんが、&lt;br &#x2F;&gt;
&lt;mark&gt;最低限、そのビジネスがどういう構造になっていて、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;何をすれば利益が出て、営業利益を上げるために、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;効果的な開発はどのようなものがあって、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;どうすればユーザーがもっと使いやすいかとかを、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;考えられれば、最低限は十分なような気もします。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらに思いを馳せつつ、&lt;br &#x2F;&gt;
一方で、&lt;strong&gt;最新の良いアーキテクチャについても議論をして、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;よりパフォーマンスを上げる実装や、内部品質構造のための、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;リファクタリングや抽象化などを考察するのも、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;非常に素晴らしいことだと思います。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(今思えば、技術力に定評がある自社サービスとかは、&lt;br &#x2F;&gt;
この２つが自然とできているような気もします。)&lt;&#x2F;p&gt;
&lt;p&gt;そもそも、エンジニアである以上、&lt;br &#x2F;&gt;
技術志向というのはある種当たり前ともいえるので、&lt;br &#x2F;&gt;
そこに少しプロダクト志向を入れるだけで、&lt;br &#x2F;&gt;
かなり視野が広いエンジニアになれるのかなと個人的には感じました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ji-shu-zhi-xiang-topurodakutozhi-xiang-haguan-xi-xing-nonakademobian-hua-suru&quot;&gt;技術志向とプロダクト志向は関係性のなかでも変化する&lt;&#x2F;h3&gt;
&lt;p&gt;そもそも、プロダクト志向は、&lt;br &#x2F;&gt;
そのプロダクトに対する愛みたいなものなので、&lt;br &#x2F;&gt;
いくら性質的にプロダクト志向のエンジニアの人でも、&lt;br &#x2F;&gt;
そのプロダクト自体になんの興味もなければ、&lt;br &#x2F;&gt;
プロダクト志向にはなりきれないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;逆に、性質的に技術志向の人でも、&lt;br &#x2F;&gt;
自分が普段利用しているサービスであれば、&lt;br &#x2F;&gt;
愛着もわくでしょうし、いくらかプロダクト志向寄りになるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、結局のところ、&lt;br &#x2F;&gt;
自分がどちらのタイプのエンジニアかは、&lt;br &#x2F;&gt;
正直のところ、そのプロダクトによっても変わると思いますし、&lt;br &#x2F;&gt;
実際は、福利厚生に目がくらんで、&lt;br &#x2F;&gt;
対して興味がないプロダクトのエンジニアとして就職することもあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;プロダクト志向は、その点流動的なものかもしれませんが、&lt;br &#x2F;&gt;
エンジニアとしてプロダクト志向をアピールしておくことは、&lt;br &#x2F;&gt;
一定の処世術として効果的なのかなと個人的には感じています。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798166391.jpg&quot; alt=&quot;プロダクトマネジメントのすべて 事業戦略・IT開発・UXデザイン・マーケティングからチーム・組織運営まで [ 及川 卓也 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プロダクトマネジメントのすべて 事業戦略・IT開発・UXデザイン・マーケティングからチーム・組織運営まで [ 及川 卓也 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%20%E4%BA%8B%E6%A5%AD%E6%88%A6%E7%95%A5%E3%83%BBIT%E9%96%8B%E7%99%BA%E3%83%BBUX%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%BB%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%8B%E3%82%89%E3%83%81%E3%83%BC%E3%83%A0%E3%83%BB%E7%B5%84%E7%B9%94%E9%81%8B%E5%96%B6%E3%81%BE%E3%81%A7%20%5B%20%E5%8F%8A%E5%B7%9D%20%E5%8D%93%E4%B9%9F%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16626149&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784814400430_1_3.jpg&quot; alt=&quot;プロダクトマネージャーのしごと 第2版 1日目から使える実践ガイド [ Matt LeMay ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プロダクトマネージャーのしごと 第2版 1日目から使える実践ガイド [ Matt LeMay ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AE%E3%81%97%E3%81%94%E3%81%A8%20%E7%AC%AC2%E7%89%88%201%E6%97%A5%E7%9B%AE%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20%5B%20Matt%20LeMay%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17581217&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【コードを記述するコード】Rubyのメタプログラミングという黒魔術</title>
        <published>2024-03-22T00:00:00+00:00</published>
        <updated>2024-03-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/metaprogramming/"/>
        <id>https://reisuta.com/metaprogramming/</id>
        
        <content type="html" xml:base="https://reisuta.com/metaprogramming/">&lt;p&gt;本記事ではメタプログラミングについてふれます。&lt;br &#x2F;&gt;
メタプログラミングは、Rubyの文法の中でも、&lt;br &#x2F;&gt;
かなり応用の部類に入り、Procなどと同様にかなり使いこなすのが難しい文法です。&lt;br &#x2F;&gt;
※ちなみに&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;block-proc&#x2F;&quot;&gt;Procについてはこちらの記事&lt;&#x2F;a&gt;で解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;block-proc&#x2F;&quot;&gt;【Rubyブロック】yieldとProcオブジェクト&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そもそもメタプログラミングはかなり応用の文法なので、&lt;br &#x2F;&gt;
Rubyの基礎の文法の解説は、&lt;br &#x2F;&gt;
下記の動画などをご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;hMaSBbtuQnY&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;メタプログラミングの実際の使用シーンは限定的で、&lt;br &#x2F;&gt;
RailsなどのOSSの内部実装で使われているという印象が強い技術です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Rubyを使う上で、&lt;br &#x2F;&gt;
メタプログラミングの知識はやはり欠かせないと思うので、&lt;br &#x2F;&gt;
本記事では、大まかな概要を解説します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;metapuroguramingutohahe-ka&quot;&gt;メタプログラミングとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;Rubyは、その柔軟性と表現力豊かな言語機能により、メタプログラミングに非常に適しています。&lt;br &#x2F;&gt;
メタプログラミングは、プログラムが自身の構造や振る舞いを解析・変更する能力を指し、&lt;br &#x2F;&gt;
これにより、より柔軟で効率的なコードを書くことができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;クラスやメソッドの定義を動的に変更したり、実行時にコードを生成したりすることができ&lt;&#x2F;strong&gt;、&lt;br &#x2F;&gt;
端的にいうと、&lt;strong&gt;コードを記述するコード&lt;&#x2F;strong&gt;という感じになります。&lt;&#x2F;p&gt;
&lt;p&gt;Railsのソースコードとかを見ると、&lt;br &#x2F;&gt;
このようなコードがたくさん使われています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;blob&#x2F;main&#x2F;activerecord&#x2F;lib&#x2F;active_record&#x2F;enum.rb#L318&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&#x2F;blob&#x2F;main&#x2F;activerecord&#x2F;lib&#x2F;active_record&#x2F;enum.rb#L318&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、上記のRailsのコードの場合、&lt;br &#x2F;&gt;
define_methodやpublic_sendなどが、&lt;br &#x2F;&gt;
メタプログラミングの代表的なメソッドに該当します。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にメタプログラミングを使うことによる利点は、&lt;br &#x2F;&gt;
&lt;mark&gt;DRY原則（Don&#x27;t Repeat Yourself）を実現し、コードの重複を減らすことができたり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;柔軟性を高め、動的な振る舞いを実現できることなどが挙げられます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;要するに、効率的なコードを書くための手段という感じですね。&lt;br &#x2F;&gt;
有名なメソッドとしては、すでに出てきた、&lt;br &#x2F;&gt;
define_method、public_send(send)や、&lt;br &#x2F;&gt;
instance_eval、method_missing、evalなどが挙げれれます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;define-methodwoshi-tutekodowodrynisuruli&quot;&gt;define_methodを使ってコードをDRYにする例&lt;&#x2F;h3&gt;
&lt;p&gt;試しに、define_methodを使って、&lt;br &#x2F;&gt;
コードをDRYにしてみたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まず、下記のようなコードがあるとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Calculator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing add operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; + &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; subtract&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing subtract operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; - &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; multiply&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing multiply operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; divide&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing divide operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Calculator&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;subtract&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;multiply&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;divide&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Calculatroクラスに、&lt;br &#x2F;&gt;
それぞれ足し算、引き算、掛け算、わり算のメソッドが定義されています。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;code&gt;puts performing&lt;&#x2F;code&gt;の部分がほとんど似通っています。&lt;br &#x2F;&gt;
仮に、このクラスに更に商のあまりを出す計算だったり、累乗とかが追加されれば、&lt;br &#x2F;&gt;
さらに冗長になるおそれがあります。&lt;&#x2F;p&gt;
&lt;p&gt;これをメタプログラミング(define_method)を使って書き直すと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Calculator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:add&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :subtract&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :multiply&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :divide&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |operation|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    define_method&lt;&#x2F;span&gt;&lt;span&gt;(operation)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |a, b|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;      puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;operation&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      case&lt;&#x2F;span&gt;&lt;span&gt; operation&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; + &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :subtract&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; - &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :multiply&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; * &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :divide&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Calculator&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;add&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;subtract&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;multiply&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;divide&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;metaprogramming&#x2F;7bd54123d7e3c6e9a9f24324eadd98ed.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このように&lt;code&gt;puts performing&lt;&#x2F;code&gt; の部分は共通化することができました。&lt;br &#x2F;&gt;
今回のケースのように単純な例だと、&lt;br &#x2F;&gt;
メタプログラミングを使わないで実装したほうが直感的でわかりやすいかも知れませんが、&lt;br &#x2F;&gt;
仮に&lt;code&gt;puts performing&lt;&#x2F;code&gt; のような各メソッドで共通の処理がさらに追加される場合は、&lt;br &#x2F;&gt;
差が顕著になってきます。&lt;&#x2F;p&gt;
&lt;p&gt;Railsなどのフレームワークは、大規模で複雑なので、&lt;br &#x2F;&gt;
メタプログラミングを使って可能な限り処理をDRYにしているというイメージですかね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sendtoevalwoshi-tutametapuroguraminguli&quot;&gt;sendとevalを使ったメタプログラミング例&lt;&#x2F;h3&gt;
&lt;p&gt;次に、sendとevalを使った例を紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;sendは、先程出てきたpublic_sendと似たようなメソッドで、&lt;br &#x2F;&gt;
send(name, *args)みたいな感じで使用し、&lt;br &#x2F;&gt;
nameで指定したmethodをargsを引数にして実行するという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Object&#x2F;i&#x2F;send.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Object&#x2F;i&#x2F;send.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;public_sendにすれば、publicメソッドだけ呼び出すことができるという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;evalは、eval(expr)みたいに使用すると、&lt;br &#x2F;&gt;
exprをRubyのプログラムとして実行するというメソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Kernel&#x2F;m&#x2F;eval.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Kernel&#x2F;m&#x2F;eval.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、紹介しておいて言うのもあれですが、&lt;br &#x2F;&gt;
基本的にevalの使用については慎重になるべきです。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、evalは何でもできてしまうので、&lt;br &#x2F;&gt;
例えば外部の入力をそのままevalに渡すようなコードを書いてしまうと、&lt;br &#x2F;&gt;
悪意あるユーザーの入力で一発でセキュリティインシデントになります。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Rubocopの警告にもevalについては、&lt;br &#x2F;&gt;
使用しないようにというものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.rubydoc.info&#x2F;gems&#x2F;rubocop&#x2F;RuboCop&#x2F;Cop&#x2F;Security&#x2F;Eval&quot;&gt;https:&#x2F;&#x2F;www.rubydoc.info&#x2F;gems&#x2F;rubocop&#x2F;RuboCop&#x2F;Cop&#x2F;Security&#x2F;Eval&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あくまで本記事では、&lt;br &#x2F;&gt;
メタプログラミングの活用例としてevalを使うので、&lt;br &#x2F;&gt;
もし実際にevalを使う場合は使用すべきか十分に検討していただけると。&lt;&#x2F;p&gt;
&lt;p&gt;さて、上記を踏まえて、&lt;br &#x2F;&gt;
下記がevalとsendを使ったメタプログラミングのサンプルです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;DynamicCalculator&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  OPERATIONS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; %i[add subtract multiply divide]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;operation&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; a&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; b&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; OPERATIONS&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;include?&lt;&#x2F;span&gt;&lt;span&gt;(operation.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_sym&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      send&lt;&#x2F;span&gt;&lt;span&gt;(operation, a, b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;      puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Invalid operation: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;operation&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  OPERATIONS&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |op|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    eval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;lt;&amp;lt;-RUBY&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      def #{&lt;&#x2F;span&gt;&lt;span&gt;op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;(a, b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Performing &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; operation:&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = case&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;                 when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                   a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;                 when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :subtract&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                   a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;                 when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :multiply&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                   a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;                 when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :divide&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                   a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;                 end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;        puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;{a} &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;op&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;{b} = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\#&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;{result}&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    RUBY&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; DynamicCalculator&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:add&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:subtract&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:multiply&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:divide&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;calculator.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calculate&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:power&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;まず、OPERATIONS 定数で、実行可能な操作のリストを定義し、&lt;br &#x2F;&gt;
:add、:subtract、:multiply、:divide の4つの操作が含まれています。&lt;&#x2F;p&gt;
&lt;p&gt;calculate メソッドは、send メソッドを使用して、与えられた操作名に対応するメソッドを動的に呼び出しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;OPERATIONS.each do |op|&lt;&#x2F;code&gt; の部分では、eval を使用して動的にメソッドを定義しています。&lt;br &#x2F;&gt;
各操作に対して、その操作名をメソッド名として持ち、引数 a と b を受け取り、その操作を実行します。&lt;&#x2F;p&gt;
&lt;p&gt;インスタンスを作成し、calculate メソッドを呼び出すことで、動的に生成されたメソッドを使用して計算を行います。&lt;br &#x2F;&gt;
与えられた操作が OPERATIONS 定数に含まれていない場合は、&quot;Invalid operation&quot; というメッセージが表示します。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、新しい操作を追加したい場合は、OPERATIONS 定数にその操作を追加するだけで、&lt;br &#x2F;&gt;
その操作を使用できるようになるので、DRYという観点では有効な実装かと思われます、&lt;&#x2F;p&gt;
&lt;h3 id=&quot;class-evaltomethod-missingwoshi-tutametapuroguramingu&quot;&gt;class_evalとmethod_missingを使ったメタプログラミング&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、class_evalとmethod_missingを使った例です。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyでは、定義されていないメソッドを呼び出すと、&lt;br &#x2F;&gt;
おなじみの、undefined method `method_name&#x27; for # (NoMethodError)みたいなエラーがでます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Rubyにおける method_missing は、オブジェクトが存在しないメソッドを呼び出したときに、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;呼び出される、BasicObjectのメソッドで、上記のおなじみのエラーはこのmethod_missingメソッドで&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;定義されているデフォルトの例外にあたります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;BasicObject&#x2F;i&#x2F;method_missing.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;BasicObject&#x2F;i&#x2F;method_missing.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そこで、この&lt;strong&gt;method_missingをオーバーライドすれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;存在しないメソッドを呼び出したときの処理を定義することができる&lt;&#x2F;strong&gt;ため、&lt;br &#x2F;&gt;
動的メソッド定義と似たようなことができそうです。&lt;&#x2F;p&gt;
&lt;p&gt;試しに、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Sample&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; method_missing&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;method&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sample&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Sample&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sample.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいなふうにSampleクラスで、&lt;br &#x2F;&gt;
親クラスのmethod_missingをオーバーライドし、&lt;br &#x2F;&gt;
定義されていないtestメソッドを呼び出します。&lt;&#x2F;p&gt;
&lt;p&gt;そうすると、hello worldが出力されます。&lt;&#x2F;p&gt;
&lt;p&gt;これを使えば、確かにメタプログラミングできそうですね。&lt;&#x2F;p&gt;
&lt;p&gt;method_missing を定義することで、オブジェクトが未定義のメソッドを呼び出したときに、&lt;br &#x2F;&gt;
そのメソッド呼び出しをキャプチャし、オブジェクトが適切に応答するようにカスタマイズできます。&lt;br &#x2F;&gt;
Rubyのオブジェクト指向の柔軟性と動的な性質を最大限に活用する手段として使用できるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これを踏まえて、method_missingとclass_evalを使用してメタプログラミング例を紹介します。&lt;br &#x2F;&gt;
あるゲームがあって、そのコマンドをmethod_missingで動的に定義している感じです。&lt;br &#x2F;&gt;
(※あくまでこんな感じになるよみたいなイメージの紹介なので中身のコードが少々冗長なのはお許しを)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Game&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @player_position&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; method_missing&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;method_name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    command_name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; method_name.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; command_name.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;start_with?&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;move_&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      direction&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; command_name.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;split&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;_&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;last&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      define_direction_method&lt;&#x2F;span&gt;&lt;span&gt;(direction)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      send&lt;&#x2F;span&gt;&lt;span&gt;(method_name,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;args)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      super&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  private&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; define_direction_method&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;direction&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;    self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class_eval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      define_method&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;move_&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;direction&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |steps|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;        move_player&lt;&#x2F;span&gt;&lt;span&gt;(direction, steps)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; move_player&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;direction&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; steps&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    case&lt;&#x2F;span&gt;&lt;span&gt; direction&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;north&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @player_position[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;south&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @player_position[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;east&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @player_position[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;west&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @player_position[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @player_position[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *=&lt;&#x2F;span&gt;&lt;span&gt; steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Player moved to &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@player_position&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Game&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;move_north&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;move_east&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;move_south&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;move_west&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;game.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;move_straight&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 新しい方向を追加した場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;class_evalは、Gameクラスに対して、&lt;br &#x2F;&gt;
動的にメソッドを定義するために使用しています。&lt;&#x2F;p&gt;
&lt;p&gt;さて、例えば、Gameのインスタンスである、&lt;br &#x2F;&gt;
game変数に、move_northというメソッドを呼び出すも、&lt;br &#x2F;&gt;
そんなメソッドはないので、method_missingが呼ばれます。&lt;&#x2F;p&gt;
&lt;p&gt;メソッド名がmoveから始まるので、&lt;br &#x2F;&gt;
ifの中のdefine_direction_methodが呼ばれます。&lt;&#x2F;p&gt;
&lt;p&gt;splitしているので、引数はnorthですね。&lt;br &#x2F;&gt;
それでclass_evalの中でdefine_methodで&lt;br &#x2F;&gt;
動的にmove_notrhというメソッドを定義します。&lt;&#x2F;p&gt;
&lt;p&gt;その中身はmove_playerのcase節のnorthになるという感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Module&#x2F;i&#x2F;class_eval.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Module&#x2F;i&#x2F;class_eval.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;metapuroguramingunozhu-yi-dian&quot;&gt;メタプログラミングの注意点&lt;&#x2F;h2&gt;
&lt;p&gt;さて、このようにメタプログラミングについて解説してきましたが、&lt;br &#x2F;&gt;
すでにお察しの通り、メタプログラミングは直感的とは言い難い記述です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、過度な使用はコードの可読性を低下させる可能性があります。&lt;br &#x2F;&gt;
また、動的な変更やmethod_missingとかを乱用すると、予期せぬ副作用なども生じる可能性があるので、&lt;br &#x2F;&gt;
Rubyに対する深い理解がないとなかなか使いこなすのが難しいのが正直なところです。&lt;&#x2F;p&gt;
&lt;p&gt;言うなれば、より抽象的な記法ともいえるので、&lt;br &#x2F;&gt;
仮にメタプログラミングを使うのであれば、&lt;br &#x2F;&gt;
行き当たりばったりではなく、きちんと設計の手順を踏んだほうが良いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;また、Rubyにはブロックなどの強力な機能があるため、&lt;br &#x2F;&gt;
メタプログラミングを使わなくても十分なケースもあるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、メタプログラミングはそれだけ扱いが難しいだけあって、&lt;br &#x2F;&gt;
&lt;strong&gt;適切な設計のもと、実装することができれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;非常に美しいコードになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;実際、Ruby on Railsなどのコードはメタプログラミングをかなり使用しており、&lt;br &#x2F;&gt;
その分、確かにソースコードを読む難易度は上がっていますが、&lt;br &#x2F;&gt;
Railsの黒魔術みたいな便利さはメタプログラミングが支えていると言っても過言ではないので、&lt;br &#x2F;&gt;
パワーは申し分ありません。&lt;&#x2F;p&gt;
&lt;p&gt;それにメタプログラミングを使用しなかったとしても、&lt;br &#x2F;&gt;
メタプログラミングを知っていると知らないのでは、&lt;br &#x2F;&gt;
雲泥の差があります。&lt;&#x2F;p&gt;
&lt;p&gt;既存のコードをメタプログラミングで置き換えられないかなどと&lt;br &#x2F;&gt;
試行錯誤するのも、かなり勉強になると思います。&lt;&#x2F;p&gt;
&lt;p&gt;もし、実務でメタプログラミングを本格的に使用するのであれば、&lt;br &#x2F;&gt;
下記の書籍を一読することをおすすめします。&lt;&#x2F;p&gt;
&lt;p&gt;かなり骨太な本ですが、&lt;br &#x2F;&gt;
メタプログラミングを使いこなすのであれば必読の一冊でしょう。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;4873117437.jpg&quot; alt=&quot;メタプログラミングRuby 第2版&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;メタプログラミングRuby 第2版&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Ruby%20%E7%AC%AC2%E7%89%88&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;booksdream&amp;#x2F;1-240001635983&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;ちなみに、この本は下記の記事でも紹介している一冊でもあります。&lt;br &#x2F;&gt;
RubyやRailsはもちろんそれ以外の書籍についても、&lt;br &#x2F;&gt;
おすすめを紹介しているので宜しければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【SQLテーブル結合(JOIN)とDDL】DBの制約と主キー&#x2F;外部キー</title>
        <published>2024-02-10T00:00:00+00:00</published>
        <updated>2024-02-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/table-join-ddl/"/>
        <id>https://reisuta.com/table-join-ddl/</id>
        
        <content type="html" xml:base="https://reisuta.com/table-join-ddl/">&lt;p&gt;本記事では、SQLにおける、&lt;br &#x2F;&gt;
テーブル結合と、CREATE TABLEなどをはじめとした、&lt;br &#x2F;&gt;
DDLについて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;また、それらに関連して、&lt;br &#x2F;&gt;
NOT NULLをはじめとしたDBレベルので制約と、&lt;br &#x2F;&gt;
主キーと外部キーについても言及します。&lt;&#x2F;p&gt;
&lt;p&gt;本記事は、前回の記事などに比べると、&lt;br &#x2F;&gt;
やや高度なトピックになるかもしれませんが、&lt;br &#x2F;&gt;
DBを実務レベルで運用することを踏まえると、&lt;br &#x2F;&gt;
絶対におさえておきたい知識なので、&lt;br &#x2F;&gt;
ぜひとも最後までご覧ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ddl&quot;&gt;DDL&lt;&#x2F;h2&gt;
&lt;p&gt;さて、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;#%E5%88%9D%E6%9C%9F%E6%A7%8B%E7%AF%89%E7%94%A8SQL%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&quot;&gt;前々回ぐらいの記事&lt;&#x2F;a&gt;で、&lt;br &#x2F;&gt;
初期構築についてのSQLをちらっと紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;&quot;&gt;【SQLデータ型】Where句と条件式における演算子&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;pylP6ifZrzU&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;ここで出てきた、&lt;br &#x2F;&gt;
&lt;code&gt;CREATE TABLE&lt;&#x2F;code&gt; などのように、&lt;br &#x2F;&gt;
&lt;mark&gt;データベースの構造を定義、変更、削除するための言語をDDL(データ定義言語)と総称します。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;他には、ALTER、DROPなどがあります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、SELECTなどの4大命令は、&lt;br &#x2F;&gt;
DML(データ操作言語)の中に該当します。&lt;&#x2F;p&gt;
&lt;p&gt;DMLに比べると、DDLを使う頻度は、&lt;br &#x2F;&gt;
少し下がるかもしれませんが、&lt;br &#x2F;&gt;
ORMとかを使わない開発の場合、&lt;br &#x2F;&gt;
嫌でも使わないと何もできないので、&lt;br &#x2F;&gt;
ぜひともおさえておきたい知識だと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;create-table&quot;&gt;CREATE TABLE&lt;&#x2F;h3&gt;
&lt;p&gt;早速、DDLの中で、&lt;br &#x2F;&gt;
おそらく最も著名なCREATE TABLEについて紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;これは、すでに前々回ぐらいの記事でも&lt;br &#x2F;&gt;
初期構築スクリプトの中で出てきているので、&lt;br &#x2F;&gt;
馴染み深いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;その名のとおり、&lt;mark&gt;CREATE TABLE文は新しいテーブルをデータベースに作成するために使用されます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;テーブル名とそれが持つべき列（カラム）とそのデータ型、さらには各種制約(NOT NULLなど)を指定することができます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;制約はテーブルに格納されるデータの正確性、一貫性、信頼性を保証するためのものと思っていただければ。&lt;br &#x2F;&gt;
(制約の種類については後述します)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;CREATE DATABASE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; testdb&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; testdb;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;CREATE TABLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; Departments&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt; AUTO_INCREMENT &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;PRIMARY KEY&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Departments (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;HR&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Departments (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;sales&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;CREATE TABLE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt; AUTO_INCREMENT &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;PRIMARY KEY&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    firstname &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    lastname &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    email &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; UNIQUE&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    position &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;DECIMAL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; NOT NULL&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    bonus &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    performance &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;CHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span&gt;),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;DATE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; DEFAULT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;2024-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    department_id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    FOREIGN KEY&lt;&#x2F;span&gt;&lt;span&gt; (department_id) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;REFERENCES&lt;&#x2F;span&gt;&lt;span&gt; Departments(id)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Employees (firstname, lastname, hiredate, salary, bonus, performance, department_id) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;tarou&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;yamada&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2023-09-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;60000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Good&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Employees (firstname, lastname, hiredate, salary, bonus, performance, department_id) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hanako&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;satou&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2023-04-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Good&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Employees (firstname, lastname, hiredate, salary, bonus, performance, department_id) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;syouta&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;yamada100%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2024-09-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;60000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Excellent&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、Employeesというテーブルを作成し、&lt;br &#x2F;&gt;
カラムとして、id firstname, position, salary, hiredateなどが存在するという感じですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;dehuorutozhi&quot;&gt;デフォルト値&lt;&#x2F;h4&gt;
&lt;p&gt;上記のクエリーで、&lt;br &#x2F;&gt;
&lt;code&gt;hireDate DATE DEFAULT &#x27;2024-01-01&#x27;&lt;&#x2F;code&gt; という部分があったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ここのDEFAULTというものは、&lt;br &#x2F;&gt;
&lt;strong&gt;デフォルト値を指定する構文で、列にデフォルト値を指定すると、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;その列に値が指定されなかった場合に自動的に設定される値を定義できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; Employees (firstname, lastname, salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;mike&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;satou&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;300&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;9455f7c28bb7490c6e9e60a9d0cb2cd1-1024x223.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一番下の行の、hiredateを見ると、&lt;br &#x2F;&gt;
デフォルト値として設定した、2024-01-01が入っていることが確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;これは、特定のデータが欠けている場合のデフォルト設定や、&lt;br &#x2F;&gt;
特定の値が頻繁に使用される場合に便利です。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルト値を指定しないと、&lt;br &#x2F;&gt;
NULLが混入しやすくなりますが、&lt;br &#x2F;&gt;
データとしてNULLが混入することを防ぎたいときに指定すると効果的かと思います。&lt;&#x2F;p&gt;
&lt;h5 id=&quot;nulltoha&quot;&gt;NULLとは？&lt;&#x2F;h5&gt;
&lt;p&gt;そもそも、NULLって何だっけっていう話ですが、&lt;br &#x2F;&gt;
&lt;strong&gt;NULLは、フィールド（列）の値が存在しない、または不明であることを示します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;これは、データベース内の特定のフィールドに値が割り当てられていない場合に使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;NULLは「0」や空文字列とは異なり、「何もない」や「値不明」のようなニュアンスのものです。&lt;&#x2F;p&gt;
&lt;p&gt;NULL値を持つデータを扱う際には注意が必要で、SQLでは、NULLは特殊な扱いを受け、&lt;br &#x2F;&gt;
通常の値とは異なるルールが適用されます。&lt;&#x2F;p&gt;
&lt;p&gt;たとえば、どんな値とNULLを比較しても結果はNULLになります&lt;br &#x2F;&gt;
（例: NULL = NULL の結果はNULL）。&lt;&#x2F;p&gt;
&lt;p&gt;これは、NULLが「不明」を意味するため、不明な値同士が等しいかどうかを判断することはできないからです。&lt;&#x2F;p&gt;
&lt;p&gt;そのためこうしたNULLが混入するのを防ぐために、&lt;br &#x2F;&gt;
デフォルト値や後述する、NOT NULL制約など活きてくるという感じになります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;not-nullzhi-yue&quot;&gt;NOT NULL制約&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;code&gt;firstname VARCHAR(100) NOT NULL,&lt;&#x2F;code&gt; にあるような、&lt;br &#x2F;&gt;
&lt;mark&gt;NOT NULL制約は、列にNULL値を許容しないことを指定します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;仮に、firstnameを指定せずにinsertするとエラーが出ます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;389c60ccf72d35b6f11a11562d0f159c.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すでに言及しましたが、NULLが紛れ込むと何かと面倒なことが多く、&lt;br &#x2F;&gt;
特に値が入ることが想定されているカラムには、&lt;br &#x2F;&gt;
この制約をつけることが一般的です。&lt;&#x2F;p&gt;
&lt;p&gt;まあ基本的に、このカラムはNULLが入っても大丈夫かなという、&lt;br &#x2F;&gt;
カラム以外は指定しておいた方が無難な制約かと思います。&lt;br &#x2F;&gt;
(必要に応じてDEFAULT値も指定して)&lt;&#x2F;p&gt;
&lt;h4 id=&quot;checkzhi-yue&quot;&gt;CHECK制約&lt;&#x2F;h4&gt;
&lt;p&gt;CHECK制約は、列に格納される値が指定した条件を満たす必要があることを指定します。&lt;br &#x2F;&gt;
NOT NULL制約とかに比べると、少しマイナーかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;これにより、特定の範囲の値のみを列に許容するなど、データの正確性をさらに強化できます。&lt;br &#x2F;&gt;
Railsとかのフレームワークだと、バリデーションでよくねってなるかもしれませんが、&lt;br &#x2F;&gt;
DBレベルでのCHECK制約をつけるのも、アプリケーションによっては、&lt;br &#x2F;&gt;
重要になってくるかもしれないので、ぜひとも覚えておきたい制約です。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;uniquezhi-yue&quot;&gt;UNIQUE制約&lt;&#x2F;h4&gt;
&lt;p&gt;UNIQUE制約は、テーブルの特定の列または列の組み合わせに対して、&lt;br &#x2F;&gt;
それぞれの行で値が一意（重複しない）であることを保証するために使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;192f8d84558e76604b37eaf6da967a55-1024x133.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;Duplicate entry&lt;&#x2F;code&gt; という感じでエラーになっていますね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;データベース内で一意の識別子やキーを確保する際に重要ですが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;主キー（PRIMARY KEY）制約とは異なり、NULL値の重複を許容します&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;drop-table&quot;&gt;DROP TABLE&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;DROP TABLE文は、データベースから指定されたテーブルを削除するために使用されます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
この操作は一度実行されると、テーブルに含まれるすべてのデータ、テーブル定義、&lt;br &#x2F;&gt;
およびテーブルに関連する制約やインデックスなどが完全に削除されます。&lt;&#x2F;p&gt;
&lt;p&gt;従って、DROP TABLE文を使用する際には、削除するテーブルに重要なデータが含まれていないか、&lt;br &#x2F;&gt;
またはデータが適切にバックアップされているかを慎重に確認することが重要です。&lt;&#x2F;p&gt;
&lt;p&gt;基本的な文法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DROP TABLE&lt;&#x2F;span&gt;&lt;span&gt; テーブル名;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;テーブル名は削除したいテーブルの名前です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DROP TABLE&lt;&#x2F;span&gt;&lt;span&gt; Employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、Employeesテーブルを削除します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;alter-table&quot;&gt;ALTER TABLE&lt;&#x2F;h3&gt;
&lt;p&gt;ALTER TABLE文は、既存のテーブルの構造を変更するために使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;テーブルに新しい列を追加したり、既存の列を削除または変更したり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;制約を追加または削除したりすることができます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ALTER TABLEはデータベースの柔軟性を高め、&lt;br &#x2F;&gt;
アプリケーションの進化に合わせてデータモデルを適応させることができる非常に強力なツールです。&lt;&#x2F;p&gt;
&lt;p&gt;DDLの中では、何かと使用頻度が高い文法にあたるかなと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ADD&lt;&#x2F;span&gt;&lt;span&gt; SecondEmail &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;255&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、EmployeesテーブルにSecondEmailという名前の新しい列を追加します。&lt;br &#x2F;&gt;
列のデータ型はVARCHAR(255)です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DROP&lt;&#x2F;span&gt;&lt;span&gt; COLUMN SecondEmail;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、EmployeesテーブルからSecondEmail列を削除します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ALTER TABLE&lt;&#x2F;span&gt;&lt;span&gt; Employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;modify&lt;&#x2F;span&gt;&lt;span&gt; Salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;DECIMAL&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;15&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この例では、EmployeesテーブルのSalary列のデータ型をDECIMAL(15, 2)に変更します。&lt;br &#x2F;&gt;
これにより、より大きな数値をSalary列に格納できるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;※ちなみに、DECIMAL(15, 2)とは、15は全体の桁数（精度）で、&lt;br &#x2F;&gt;
2は小数点以下の桁数（スケール）を指します。&lt;br &#x2F;&gt;
つまり、この定義では最大で15桁の数字を扱うことができ、そのうち2桁が小数部分に割り当てられるという感じです。&lt;br &#x2F;&gt;
ちなみに、ただDECIMALとした場合は、DECIMAL(10, 0)と同じ意味になります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;fixed-point-types.html&quot;&gt;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;fixed-point-types.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teburunojie-he&quot;&gt;テーブルの結合&lt;&#x2F;h2&gt;
&lt;p&gt;さて、お次はテーブルの結合について言及していきます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;テーブル結合は、複数のテーブルからデータを結合して一つの結果を生成する強力な機能です。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
テーブル結合を適切に使用することで、データベースからのデータ取得をより柔軟に、効率的に行えるようになります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zhu-kitowai-bu-ki&quot;&gt;主キーと外部キー&lt;&#x2F;h3&gt;
&lt;p&gt;テーブル結合に際して、&lt;br &#x2F;&gt;
重要な概念として主キーと外部キーというものがあり、&lt;br &#x2F;&gt;
&lt;mark&gt;テーブル内の各レコードを一意に識別するための列を主キーと呼び、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;他のテーブルの主キーを参照するための列を外部キーと呼びます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;主キーに設定されたフィールドは、NULLを含むことができず、&lt;br &#x2F;&gt;
データの整合性を保つために、テーブル内でその値は一意でなければなりません。&lt;br &#x2F;&gt;
Departments テーブルにおける id 列が主キーにあたります。&lt;&#x2F;p&gt;
&lt;p&gt;一方で外部キーは、&lt;br &#x2F;&gt;
Employees テーブルにおける department_id 列があたります。&lt;&#x2F;p&gt;
&lt;p&gt;テーブルの結合条件として、主キーと外部キーを使用し、&lt;br &#x2F;&gt;
下記で紹介するINNER JOINやOUTER JOINなどを行います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nei-bu-jie-he-inner-join&quot;&gt;内部結合(INNER JOIN)&lt;&#x2F;h3&gt;
&lt;p&gt;早速、結合の種類ですが、&lt;br &#x2F;&gt;
大きく分けて、内部結合と外部結合があり、&lt;br &#x2F;&gt;
&lt;strong&gt;結合すべき相手の行が見つからないとき、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;行が消滅するものを内部結合(INNER JOIN)といいます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;INNER JOINは、二つのテーブル間で共通するデータのみを結合して取得します。&lt;br &#x2F;&gt;
この結合タイプは、一般的に使用される結合方法の一つです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;firstname&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;INNER JOIN&lt;&#x2F;span&gt;&lt;span&gt; Departments &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ON&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;department_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、EmployeesテーブルとDepartmentsテーブルをdepartment_idとidで結合し、&lt;br &#x2F;&gt;
従業員の名前とそれに対応する部署名を取得します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;f7f511e30e963bdb1600684c51a93119-1024x157.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wai-bu-jie-he-outer-join&quot;&gt;外部結合(OUTER JOIN)&lt;&#x2F;h3&gt;
&lt;p&gt;内部結合であれば、&lt;br &#x2F;&gt;
&lt;strong&gt;行が消滅してしまうようなものを、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;出力するのを外部結合&lt;&#x2F;strong&gt;と総称し、&lt;br &#x2F;&gt;
下記のような種類があります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;left-join-left-outer-join&quot;&gt;LEFT JOIN (LEFT OUTER JOIN)&lt;&#x2F;h3&gt;
&lt;p&gt;L&lt;strong&gt;EFT JOIN (またはLEFT OUTER JOIN) は、左テーブルの全てのレコードと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;それと一致する右テーブルのレコードを取得します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;一致するレコードが右テーブルに存在しない場合、右テーブルのフィールドはNULLとして返されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;firstname&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;LEFT JOIN&lt;&#x2F;span&gt;&lt;span&gt; Departments &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ON&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;department_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリでは、すべての従業員と、該当する場合はその部署名を取得します。&lt;br &#x2F;&gt;
部署に所属していない従業員も結果に含まれ、そのdepartment.nameはNULLとなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;f5dd07b91574e5538b73ba620b295822.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;right-join-right-outer-join&quot;&gt;RIGHT JOIN (RIGHT OUTER JOIN)&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;RIGHT JOIN (またはRIGHT OUTER JOIN) は、左テーブルと右テーブルを結合しますが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;結果セットには右テーブルの全レコードが含まれ、左テーブルの一致するレコードのみが表示されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;firstname&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;RIGHT JOIN&lt;&#x2F;span&gt;&lt;span&gt; Departments &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ON&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;department_id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリでは、すべての部署と、該当する場合はその部署に所属する従業員の名前を取得します。&lt;br &#x2F;&gt;
従業員がいない部署も結果に含まれ、そのnameはNULLとなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;599b2ec6bd3dbb5d2ce91f2e18b4432c.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cross-join&quot;&gt;CROSS JOIN&lt;&#x2F;h3&gt;
&lt;p&gt;CROSS JOINは、一つのテーブルの各レコードを他のテーブルの&lt;br &#x2F;&gt;
全レコードと組み合わせた結果を生成します。&lt;br &#x2F;&gt;
この結合は、特定の一致条件を指定しないため、結果セットは通常非常に大きくなります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; Employees&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;firstname&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;Departments&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;CROSS JOIN&lt;&#x2F;span&gt;&lt;span&gt; Departments;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリでは、Employeesテーブルのすべての従業員と、Departmentsテーブルのすべての部署の組み合わせを取得します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;table-join-ddl&#x2F;d568a513f5e0a7ba635c7df21a02cd83.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、inner joinやouter joinに比べて、&lt;br &#x2F;&gt;
圧倒的に使用頻度が下がるので、&lt;br &#x2F;&gt;
正直、知らなくてもあんまり問題ない気もしますが、&lt;br &#x2F;&gt;
ピンポイントにクエリー分析で組み合わせとかを算出したいときなどは、&lt;br &#x2F;&gt;
知っておくと便利かもしれません。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【SQL グループ化】GROUP BY&#x2F;HAVING句とWITH ROLLUP</title>
        <published>2024-02-02T00:00:00+00:00</published>
        <updated>2024-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/group-by-having/"/>
        <id>https://reisuta.com/group-by-having/</id>
        
        <content type="html" xml:base="https://reisuta.com/group-by-having/">&lt;p&gt;本記事では、SQLにおける、&lt;br &#x2F;&gt;
グループ化について解説します。&lt;&#x2F;p&gt;
&lt;p&gt;データを集約し、特定の条件でフィルタリングする際に、&lt;br &#x2F;&gt;
Group ByとHaving句というものを使用して、&lt;br &#x2F;&gt;
グループ化をすることができます。&lt;&#x2F;p&gt;
&lt;p&gt;グループ化は、めちゃくちゃ使うというわけでもないのですが、&lt;br &#x2F;&gt;
知っておくべき必須教養みたいな側面はあるので、&lt;br &#x2F;&gt;
ぜひとも押さえておきたい知識です。&lt;&#x2F;p&gt;
&lt;p&gt;また、グループ化は、&lt;br &#x2F;&gt;
基本的に集計関数といっしょに使うことが多いので、&lt;br &#x2F;&gt;
集計関数をはじめとした様々な関数について詳しく知りたい方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;も併せて御覧ください&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sqlnogurupuhua&quot;&gt;SQLのグループ化&lt;&#x2F;h2&gt;
&lt;p&gt;早速本題に入りたいのですが、&lt;br &#x2F;&gt;
環境構築については、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;db-sql-basic&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;で紹介しているので、&lt;br &#x2F;&gt;
こちらでDockerのMySQLコンテナが立ち上がっていると想定します。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2357&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;今回はグループ化なので、&lt;br &#x2F;&gt;
部署テーブルなどを作っおく必要があるので、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;#%E5%88%9D%E6%9C%9F%E6%A7%8B%E7%AF%89%E7%94%A8SQL%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&quot;&gt;初期構築のスクリプト&lt;&#x2F;a&gt;については、&lt;br &#x2F;&gt;
下記の記事を御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2385&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;group-by&quot;&gt;GROUP BY&lt;&#x2F;h3&gt;
&lt;p&gt;まず、Group Byについてです。&lt;&#x2F;p&gt;
&lt;p&gt;SQLの集計に際し、検索結果をグループごとのまとまりに分ける機能があり、&lt;br &#x2F;&gt;
それが、Group Byにあたります。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、単に&lt;code&gt;SUM(salary)&lt;&#x2F;code&gt; とかとすると、&lt;br &#x2F;&gt;
すべての合計が算出されますが、&lt;br &#x2F;&gt;
&lt;mark&gt;これを例えば、Departmentの営業部だけの合計を算出したいなどというときに、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Group Byは使えます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;Group By句は、SQLにおけるデータ集約の基本て、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;特定の列を基にして、データをグループ化し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;それぞれのグループに対して集計関数（例：SUM、AVG、COUNT）を適用したいときに&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;使用するでしょう。&lt;&#x2F;mark&gt;文法としては、下記のような感じで、&lt;br &#x2F;&gt;
GROUP BYで指定する列とSELECTの最初の列が同様という感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; 列1, 集計関数(列2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; テーブル&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; 絞り込み条件)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;GROUP BY&lt;&#x2F;span&gt;&lt;span&gt; 列1;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;例えば、下記のようなテーブルがあったとします。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;ID&lt;&#x2F;td&gt;&lt;td&gt;Department&lt;&#x2F;td&gt;&lt;td&gt;salary&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;sales&lt;&#x2F;td&gt;&lt;td&gt;6000&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;sales&lt;&#x2F;td&gt;&lt;td&gt;3000&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;HR&lt;&#x2F;td&gt;&lt;td&gt;3000&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;group-by-having&#x2F;00a83c37cc15daa23de4883966fcb8a0.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このテーブルに対して、&lt;br &#x2F;&gt;
Departmentごとの平均給与を計算するSQLは以下の通りです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; department, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;AVG&lt;&#x2F;span&gt;&lt;span&gt;(Salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; AverageSalary&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;GROUP BY&lt;&#x2F;span&gt;&lt;span&gt; department;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;group-by-having&#x2F;b6fee5eecda2f6c32cd1cbb7e1fc18aa.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;この場合、salesが60000 + 30000 &#x2F; 2 = 45000になり、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;HRはそのまま60000になっているので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;確かに部署ごとの平均給与になっていますね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最初のうちは、混乱するかもしれませんが、&lt;br &#x2F;&gt;
要するに複数のレコードにおいて、&lt;br &#x2F;&gt;
同じ値が出ることが想定されるカラム(上記でいうと部署のように)に対して、&lt;br &#x2F;&gt;
全データにおいて、その値においてグループ化したいというときに使用できるのが、&lt;br &#x2F;&gt;
Group byという感じです(余計わかりにくくなった...?)&lt;&#x2F;p&gt;
&lt;p&gt;グループ化の流れとして、&lt;br &#x2F;&gt;
例えば、Where句などもある場合は、&lt;br &#x2F;&gt;
先にWhereによる絞り込みが行われてから、&lt;br &#x2F;&gt;
その表に対して、グループ集計が行われます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そのため、集計し終わったものに対しての絞り込みは、&lt;br &#x2F;&gt;
Whereが最初に絞り込みを行う関係上、&lt;br &#x2F;&gt;
Whereでは行うことはできません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そこで使用するのが、次に紹介する、&lt;br &#x2F;&gt;
Having Byとなります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;havingju&quot;&gt;HAVING句&lt;&#x2F;h3&gt;
&lt;p&gt;Having句は、Group Byによってグループ化されたデータに対するフィルタリングを行います。&lt;br &#x2F;&gt;
Where句と似ていますが、Having句は集約関数と共に使用される点が異なります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; 列1, 集計関数(列2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; テーブル&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;GROUP BY&lt;&#x2F;span&gt;&lt;span&gt; 列1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;HAVING&lt;&#x2F;span&gt;&lt;span&gt; 集計関数(列2) 条件;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;HAVING句にも、&lt;br &#x2F;&gt;
Whereと同様に条件式を書くので、&lt;br &#x2F;&gt;
使い方としては、ほぼ同様です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;異なるのは、その実行タイミングという感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;平均給与が46000以上の部門だけを表示するSQLは以下の通りです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; Department, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;AVG&lt;&#x2F;span&gt;&lt;span&gt;(Salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; AverageSalary&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;GROUP BY&lt;&#x2F;span&gt;&lt;span&gt; Department&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;HAVING&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; AVG&lt;&#x2F;span&gt;&lt;span&gt;(Salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 46000&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;group-by-having&#x2F;8a5332798d80458a81555d4bc7240453-1024x147.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のクエリーでHavingの部分を省略すると、&lt;br &#x2F;&gt;
sales | 45000の結果も取得されるので、&lt;br &#x2F;&gt;
確かにHaving句で結果を絞っていることがわかると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、このHavingとGroup byを踏まえて、&lt;br &#x2F;&gt;
最終的なSELECT文をまとめると、&lt;br &#x2F;&gt;
SELECT文は下記のような文法となります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;select 列1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;from テーブル名&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(where 条件式)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(group by グループ化列)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(having 集計結果に対する条件式)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(order by 並び替えたい列)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;group-bytohavingju-nozu-mihe-wase&quot;&gt;Group ByとHaving句の組み合わせ&lt;&#x2F;h4&gt;
&lt;p&gt;Group ByとHaving句を組み合わせることで、より複雑なデータ集約とフィルタリングが可能になります。&lt;br &#x2F;&gt;
例えば、各部門で最高給与を得ている従業員の数をカウントするには以下のようにします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; Department, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;MAX&lt;&#x2F;span&gt;&lt;span&gt;(Salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; MaxSalary, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;COUNT&lt;&#x2F;span&gt;&lt;span&gt;(ID) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; NumberOfEmployees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;GROUP BY&lt;&#x2F;span&gt;&lt;span&gt; Department&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;HAVING&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; COUNT&lt;&#x2F;span&gt;&lt;span&gt;(ID) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;group-by-having&#x2F;4a292bfd262eeb6af36aa80ecbc58c69-1024x405.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一番上のクエリーの場合、&lt;br &#x2F;&gt;
&lt;code&gt;HAVING COUNT(ID) &amp;gt; 1&lt;&#x2F;code&gt; と条件を加えているため、&lt;br &#x2F;&gt;
一人しかいないHRのデータは取得できていません。&lt;&#x2F;p&gt;
&lt;p&gt;２つ目のクエリのように、&lt;br &#x2F;&gt;
HAVING句をなくすと、&lt;br &#x2F;&gt;
部署ごとの最高給与とそのレコード数を出すので、&lt;br &#x2F;&gt;
HRの方は1、salesは2と出していますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;with-rollup-xiu-shi-zi&quot;&gt;WITH ROLLUP 修飾子&lt;&#x2F;h3&gt;
&lt;p&gt;MySQLにおいては、&lt;br &#x2F;&gt;
グループ化について、&lt;br &#x2F;&gt;
WITH ROLLUPというものが使えます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;group-by-modifiers.html&quot;&gt;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;group-by-modifiers.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;WITH ROLLUPは、MySQLでGROUP BY句と共に使用されるオプションで、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;集約されたデータに加えて、合計値を計算するために使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;階層的な集約結果を簡単に取得でき、データの概要を把握しやすくなります。&lt;&#x2F;p&gt;
&lt;p&gt;WITH ROLLUPを使用すると、GROUP BYで指定された列の各組み合わせに対する集約結果に加えて、&lt;br &#x2F;&gt;
それらの組み合わせの全体の合計を得ることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; Department, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;sum&lt;&#x2F;span&gt;&lt;span&gt;(Salary) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS&lt;&#x2F;span&gt;&lt;span&gt; AverageSalary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; Employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;group by&lt;&#x2F;span&gt;&lt;span&gt; department &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;with rollup&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;group-by-having&#x2F;1e797c1a1bce32130e56dfc88c2ff25d-1024x395.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;画像のように、with rollupを付け加えることで、&lt;br &#x2F;&gt;
AverageSalaryの合計値を出すことができますね。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【SQL基礎】DISTINCTやORDER BYなどの検索結果の加工と関数</title>
        <published>2024-01-24T00:00:00+00:00</published>
        <updated>2024-01-24T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/distinct-order-by-function/"/>
        <id>https://reisuta.com/distinct-order-by-function/</id>
        
        <content type="html" xml:base="https://reisuta.com/distinct-order-by-function/">&lt;p&gt;本記事では、検索結果の加工として使われる、&lt;br &#x2F;&gt;
DISTINCT、ORDER BYなどを始め、&lt;br &#x2F;&gt;
LENGTHやCOALESCEなどの様々な関数について&lt;br &#x2F;&gt;
紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;&quot;&gt;前回の記事はこちら&lt;&#x2F;a&gt;です。&lt;br &#x2F;&gt;
ハンズオンで試したい方は、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;&quot;&gt;前回の記事&lt;&#x2F;a&gt;と&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;db-sql-basic&#x2F;&quot;&gt;前々回の記事&lt;&#x2F;a&gt;で&lt;br &#x2F;&gt;
DockerのSQLの環境構築を紹介しているので、&lt;br &#x2F;&gt;
そちらを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;また、Youtube動画の方もあるので、&lt;br &#x2F;&gt;
文字より動画の方が良いという方は、&lt;br &#x2F;&gt;
こちらもご参考ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Bd4QUKu4PHo&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;selectniokerujian-suo-jie-guo-nojia-gong&quot;&gt;SELECTにおける検索結果の加工&lt;&#x2F;h2&gt;
&lt;p&gt;早速、検索した結果を加工するための文法として、&lt;br &#x2F;&gt;
DISTINCT、ORDER BY、OFFSET-FETCHについて&lt;br &#x2F;&gt;
取り上げます。&lt;&#x2F;p&gt;
&lt;p&gt;特に、前2つはよく使うので、&lt;br &#x2F;&gt;
覚えておくと便利かと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;distinct&quot;&gt;DISTINCT&lt;&#x2F;h3&gt;
&lt;p&gt;SQLのDISTINCTは、&lt;mark&gt;クエリ結果から重複する行を除外し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ユニークな行のみを取得するために使用されます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;データベース内の重複を排除し、&lt;br &#x2F;&gt;
特定のカラムに存在する異なる値のセットを取得する際に特に便利です。&lt;&#x2F;p&gt;
&lt;p&gt;SELECT DISTINCT文を使用して、重複を除去します。&lt;br &#x2F;&gt;
一つ以上のカラムを指定することができ、指定されたカラムの組み合わせがユニークな行のみが選択されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT DISTINCT&lt;&#x2F;span&gt;&lt;span&gt; salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のクエリは、employeesテーブルのsalaryカラムから&lt;br &#x2F;&gt;
重複する給料を除外したユニークなリストを取得します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT DISTINCT name&lt;&#x2F;span&gt;&lt;span&gt;, salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こっちのクエリでは、employeesテーブルからsalaryとnameの組み合わせで&lt;br &#x2F;&gt;
ユニークな行のみを取得します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そのため、先程のsalaryだけだと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;重複するものも、nameとの組み合わせで重複していない場合は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;取得できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;ab12d2a5364cbe02c55b1f6a6c7c8fde.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;order-by&quot;&gt;ORDER BY&lt;&#x2F;h3&gt;
&lt;p&gt;次に、SQLのORDER BYです。&lt;br &#x2F;&gt;
こちらは、&lt;mark&gt;クエリ結果を特定のカラムまたは複数のカラムに基づいて並べ替えるために使用されます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
これにより、データを特定の順序（昇順や降順）で表示することが可能になります。&lt;&#x2F;p&gt;
&lt;p&gt;ORDER BY句は、SELECT文の最後に配置し、&lt;br &#x2F;&gt;
デフォルトでは昇順(1, 2, 3...)（ASC）で並び替えられますが、&lt;br &#x2F;&gt;
降順(3, 2, 1...)（DESC）で並び替えることもできます。&lt;&#x2F;p&gt;
&lt;p&gt;複数のカラムに基づいて並び替えることも可能です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ORDER BY&lt;&#x2F;span&gt;&lt;span&gt; salary;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、employeesテーブルのレコードを給与（salary）の昇順で並び替えて表示します。&lt;br &#x2F;&gt;
つまり、一番給与が低い人が先頭に表示されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ORDER BY&lt;&#x2F;span&gt;&lt;span&gt; hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DESC&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こちらのクエリでは、employeesテーブルのレコードを雇用日（hiredate）の降順で並び替えます。&lt;br &#x2F;&gt;
つまり、一番最近に入社した人が先頭に表示されますね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;3600ae4c9064ac98493775ecbcb56344.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ORDER BY name&lt;&#x2F;span&gt;&lt;span&gt;, salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DESC&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のクエリでは、employeesテーブルのレコードをまずnameの昇順(デフォルト)で並び替え、&lt;br &#x2F;&gt;
次に給与（salary）の降順で並び替えて表示します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;複数の列で並べ替える際は、最初に指定した列で並べ替えてから、&lt;br &#x2F;&gt;
同じ値がある際に次の列の値で並べ替えられます。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;c248ea26bd4786f27bac5ce5b5681e29.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ORDER BYを使わないSelectにおいても、&lt;br &#x2F;&gt;
なんとなく昇順で並び替えられたものが出力されていたかもしれませんが、&lt;br &#x2F;&gt;
ORDER BYを使わないSELECTにおけるデータの並び順は、&lt;br &#x2F;&gt;
保証されず、実質ランダムです。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、必ずこの並び順にしてほしいという場面では、&lt;br &#x2F;&gt;
ORDER BYは必須になるでしょう&lt;&#x2F;p&gt;
&lt;h3 id=&quot;offset-fetch&quot;&gt;OFFSET - FETCH&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、OFFSETです。&lt;br &#x2F;&gt;
少しマイナーですね。&lt;&#x2F;p&gt;
&lt;p&gt;それに加えて、DBMS製品によっては、&lt;br &#x2F;&gt;
使えないこともあるので、&lt;br &#x2F;&gt;
上2つに比べると、重要度は下がるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;OFFSET-FETCH句は、&lt;strong&gt;SQLクエリの結果から特定の範囲の行だけを取得するために使用されます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
これは、大量のデータがある場合にページネーション（データの分割表示）などを行う際に特に便利です。&lt;&#x2F;p&gt;
&lt;p&gt;OFFSET句は、スキップする行数を指定します。&lt;br &#x2F;&gt;
FETCH句は、取得する行数を指定します。&lt;br &#x2F;&gt;
OFFSET - FETCH句単体でも、多くのDBMS製品で使用できますが、&lt;br &#x2F;&gt;
この句は通常、ORDER BY句と組み合わせて使用されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ORDER BY name&lt;&#x2F;span&gt;&lt;span&gt; OFFSET &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ROWS FETCH NEXT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ROWS&lt;&#x2F;span&gt;&lt;span&gt; ONLY;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じのクエリーです。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、このクエリーはmysqlではサポートされていないので、&lt;br &#x2F;&gt;
mysqlでは、LIMITという別のものを使用する必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;ORDER BY name LIMIT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt; OFFSET &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;もしかすると、こちらの方がメジャーかもしれませんね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guan-shu&quot;&gt;関数&lt;&#x2F;h2&gt;
&lt;p&gt;さてお次は、SQLにおける、&lt;br &#x2F;&gt;
関数について紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;関数自体はプログラミング言語でおなじみの概念ですし、&lt;br &#x2F;&gt;
SQLにおいても基本的な概念は変わりません。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、こうした関数の中で&lt;br &#x2F;&gt;
良く使われるものをいくつか紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;そもそも、関数とは何かというと、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;与えられたもの(引数)を、特定の処理を行うことで、&lt;br &#x2F;&gt;
別の値(戻り値)に変換してくれるものを良います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;関数自体の詳細な解説は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-func&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;のほうがわかりやすいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;34&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;MySQLにおける組み込みの関数は、&lt;br &#x2F;&gt;
かなりの種類があって、&lt;br &#x2F;&gt;
すべてを紹介するのは難しいので、&lt;br &#x2F;&gt;
著名で良く使いそうなものをご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;より細かい関数については、&lt;br &#x2F;&gt;
下記のドキュメントを御覧ください&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;built-in-function-reference.html&quot;&gt;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;built-in-function-reference.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;length&quot;&gt;LENGTH&lt;&#x2F;h3&gt;
&lt;p&gt;まず最初がLENGTHです。&lt;&#x2F;p&gt;
&lt;p&gt;LENGTH関数は、&lt;strong&gt;文字列の長さをバイト数で返す関数です。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
この関数は、データベース内で文字列データの処理において役に立ちます。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なLENGTH関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;LENGTH(文字列)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;テーブルに保存する文字列のバイトサイズを確認し、特定のサイズを超えるデータの取り扱いを決定する際に使用したり、&lt;br &#x2F;&gt;
特定のフィールドに保存されるデータの長さを制限する必要がある場合、LENGTH関数を用いてデータ長をチェックしたりします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT LENGTH&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、&#x27;hello&#x27;という文字列のバイトサイズを返します。&lt;&#x2F;p&gt;
&lt;p&gt;注意点としては、文字数ではなく、&lt;br &#x2F;&gt;
バイト数を返すので、マルチバイト文字(漢字とか平仮名など)が含まれている場合は、&lt;br &#x2F;&gt;
複数のバイトとしてカウントします。&lt;&#x2F;p&gt;
&lt;p&gt;&#x27;hello&#x27;のような英語の場合は、&lt;br &#x2F;&gt;
通常バイト数は、文字数と思ってもらっても問題ないかと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;substring&quot;&gt;SUBSTRING&lt;&#x2F;h3&gt;
&lt;p&gt;SUBSTRING関数は、文字列関数の一つであり、&lt;br &#x2F;&gt;
&lt;strong&gt;文字列の特定の部分を抽出するために使用されます&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;この関数は、データのフォーマットや&lt;br &#x2F;&gt;
データの部分的な表示において役に立ちます。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なSUBSTRING関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;SUBSTRING(文字列, 開始位置, [長さ])&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;長い文字列から特定の部分だけを表示する必要がある場合、SUBSTRING関数を使用してその部分を抽出できるので、&lt;br &#x2F;&gt;
ログファイルや大量のテキストデータから特定の情報を抽出する際にも使用されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; SUBSTRING&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Hello World&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、&#x27;Hello World&#x27;の最初の5文字、つまり&#x27;Hello&#x27;を返します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;c3c1b104b31bc81ca2006063031de10c.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; SUBSTRING&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;MySQL Database&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;6&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、6番目の文字から始まる文字列、つまり&#x27;Database&#x27;を返します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;concat&quot;&gt;CONCAT&lt;&#x2F;h3&gt;
&lt;p&gt;CONCAT関数は、&lt;strong&gt;複数の文字列を結合するために使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この関数は、データの表示やデータベース内の情報の組み合わせにおいて有用です&lt;&#x2F;p&gt;
&lt;p&gt;CONCAT関数は、二つ以上の文字列を結合して一つの文字列を作成し、&lt;br &#x2F;&gt;
基本的なCONCAT関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;CONCAT(文字列1, 文字列2, …, 文字列N)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;データのフォーマット変更やレポートの作成などで&lt;br &#x2F;&gt;
使えそうですね。&lt;&#x2F;p&gt;
&lt;p&gt;データベース内の情報を組み合わせて、動的にクエリを生成する際にも使用されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; CONCAT&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;World&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、&#x27;Hello&#x27;と&#x27;World&#x27;を結合して&#x27;Hello World&#x27;を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; CONCAT&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,salary ) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;AS profile FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、従業員テーブルの名前と給与の列を結合して、&lt;br &#x2F;&gt;
簡単なprofileを表示します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;0cef2c6fff221985e92f7830600528ec.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;round-trunc&quot;&gt;ROUND&#x2F;TRUNC&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、小数の丸め処理系です。&lt;&#x2F;p&gt;
&lt;p&gt;ROUND関数とTRUNC関数は、数値の丸め処理を行うために使用される関数です。&lt;br &#x2F;&gt;
これらの関数は、データの整形や計算において重要な役割を果たします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ROUND関数は、指定された小数点以下の桁数に基づいて数値を丸めます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
基本的なROUND関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;ROUND(数値, 小数点以下の桁数)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;一方で、TRUNC関数（またはTRUNCATE関数）は、指定された小数点以下の桁数で数値を切り捨てます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
基本的なTRUNC関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;TRUNCATE(数値, 小数点以下の桁数)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;会計や財務報告において、数値を特定の小数点以下の桁数で丸めるときに、&lt;br &#x2F;&gt;
ROUND関数は使用されることが多いです。&lt;br &#x2F;&gt;
データ分析やレポート作成などで、数値データをより整った形で表示したいときは、&lt;br &#x2F;&gt;
TRUNC関数を使用することが多いかと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; ROUND&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;123&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4567&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは123.4567を小数点以下2桁で丸め、123.46を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT TRUNCATE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;123&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4567&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは123.4567を小数点以下2桁で切り捨て、123.45を返します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;power&quot;&gt;POWER&lt;&#x2F;h3&gt;
&lt;p&gt;POWER関数も、数学関数の一つで、&lt;br &#x2F;&gt;
&lt;strong&gt;ある数値を指定されたべき乗に上げるために使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使い方としては、第一引数を第二引数で指定されたべき乗に上げます。&lt;br &#x2F;&gt;
基本的なPOWER関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;POWER(基数, べき指数)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;複雑な計算処理やデータ分析において、&lt;br &#x2F;&gt;
べき乗の計算を行う際に使用されるかと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; POWER&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、2の3乗、つまり8を返します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;current-date-current-time-current-timestamp&quot;&gt;CURRENT_DATE&#x2F;CURRENT_TIME&#x2F;CURRENT_TIMESTAMP&lt;&#x2F;h3&gt;
&lt;p&gt;お次は日付系の関数です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMPは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;現在の日付や時刻を取得するために使用される関数です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらの関数は、データのタイムスタンプ記録、スケジューリング、&lt;br &#x2F;&gt;
レポート作成において役に立つかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;CURRENT_DATE関数は、現在の日付をYYYY-MM-DDの形式で返します。&lt;br &#x2F;&gt;
データの日付単位でのフィルタリング、レポーティング、および日付に基づく計算に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;CURRENT_TIME関数は、現在の時刻をHH:MM:SSの形式で返します。&lt;br &#x2F;&gt;
時刻に基づいてデータを処理する場合や、レポートでの時間記録などに使用するかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;CURRENT_TIMESTAMP関数は、現在の日時をYYYY-MM-DD HH:MM:SSの形式で返します。&lt;br &#x2F;&gt;
データのタイムスタンプ記録、日時に基づくトリガーやイベントのスケジューリングなどに使用されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; CURRENT_DATE();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは現在の日付を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; CURRENT_TIME&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは現在の時刻を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; CURRENT_TIMESTAMP&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは現在の日時を返します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cast&quot;&gt;CAST&lt;&#x2F;h3&gt;
&lt;p&gt;CAST関数は、&lt;strong&gt;あるデータ型を別のデータ型に変換するために使用される関数です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;データベースでのデータ操作において非常に重要な役割を果たします。&lt;br &#x2F;&gt;
この関数を使用することで、文字列を数値に、数値を日付に、等々、&lt;br &#x2F;&gt;
さまざまな形式のデータ型変換が可能になります。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なCAST関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;CAST(変換したい値 AS 変換後のデータ型)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;用途としては、データ型の不一致を解消したり、&lt;br &#x2F;&gt;
特定のフォーマットでデータを表示したい場合に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;異なるデータ型を持つ列を比較する際や、結合する際に、データ型の不一致が問題になることがあるので、&lt;br &#x2F;&gt;
CAST関数を使用してデータ型を揃えることで、これらの問題を解決できます。&lt;&#x2F;p&gt;
&lt;p&gt;それ以外だと、 文字列型の数値を数値型に変換してから計算を行う必要がある場合など、&lt;br &#x2F;&gt;
CAST関数が有効です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; CAST&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2024-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; AS&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; DATE&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは文字列 &#x27;2024-01-01&#x27; を日付型に変換します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;da750cc67d0921a6823e64e00667f2b1.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;coalesce&quot;&gt;COALESCE&lt;&#x2F;h3&gt;
&lt;p&gt;COALESCE関数は、SQLで使用される関数の一つで、&lt;br &#x2F;&gt;
&lt;strong&gt;引数リストの中から最初の非NULL値を返します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この関数はNULL値を扱う際の便利なツールです。&lt;br &#x2F;&gt;
&lt;strong&gt;すべての引数がNULLの場合、結果もNULLとなります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、ややマイナーな気もしますが、&lt;br &#x2F;&gt;
知っておくと結構便利な関数かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なCOALESCE関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;COALESCE(値1, 値2, …, 値N)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;主にNULL値を扱う際に使用され、NULL値をデフォルト値や代替値に置き換えるのに役立ちます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
テーブルの列にNULL値が含まれている場合、COALESCE関数を使用して特定のデフォルト値を設定できます。&lt;&#x2F;p&gt;
&lt;p&gt;計算や集計を行う際にNULL値を特定の数値に置き換える必要がある場合に便利です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; COALESCE&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;NULL&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは3を返します（最初の非NULL値）&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; COALESCE&lt;&#x2F;span&gt;&lt;span&gt;(bonus, performance, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;no-bonus&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;bonus列がNULLの場合、performance列の値が使用されます。両列ともNULLの場合、&#x27;no-bonus&#x27;が表示されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;72571ab67c7106e00700f836fdebd86f.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; SUM&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;COALESCE&lt;&#x2F;span&gt;&lt;span&gt;(bonus, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリでは、bonus列がNULLの場合、0が使用され、bonusの合計が計算されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;f670336fb0f106281ad7ba6b53be6b77.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sum-max-min-avg&quot;&gt;SUM&#x2F;MAX&#x2F;MIN&#x2F;AVG&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、集約関数系統です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;SUM, MAX, MIN, AVGといった集約関数は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;データ分析やレポート作成において広く使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;SUM関数は、&lt;strong&gt;指定された列の数値の合計を計算します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
合計売上、合計コスト、総ポイント数など、数値データの合計が必要な場合に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;MAX関数は、&lt;strong&gt;指定された列の最大値を返します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
最高売上、最大温度、最高スコアなど、データセット内の最大値を見つける場合に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;MIN関数は、&lt;strong&gt;指定された列の最小値を返します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
最低売上、最小温度、最低スコアなど、データセット内の最小値を見つける場合に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;AVG関数は、&lt;strong&gt;指定された列の平均値を計算します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
平均売上、平均温度、平均評価など、数値データの平均が必要な場合に使用されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; SUM&lt;&#x2F;span&gt;&lt;span&gt;(bonus) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、employeesテーブルのbonusの合計を計算します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; MAX&lt;&#x2F;span&gt;&lt;span&gt;(bonus) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、bonusの最高額を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; MIN&lt;&#x2F;span&gt;&lt;span&gt;(bonus) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、bonusの最低額を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; AVG&lt;&#x2F;span&gt;&lt;span&gt;(bonus) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、bonusの平均を計算します。&lt;br &#x2F;&gt;
nullの値がある場合は、それを無視して計算するので、&lt;br &#x2F;&gt;
160 &#x2F; 3 = 53.33333333を返します。&lt;&#x2F;p&gt;
&lt;p&gt;nullにデフォルト値を入れたい場合は、&lt;br &#x2F;&gt;
先述した、COALESCEを使うのが良いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;distinct-order-by-function&#x2F;14ffab9695a65b3ed4752c88f1d579e7.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;count&quot;&gt;COUNT&lt;&#x2F;h3&gt;
&lt;p&gt;COUNT関数も、集約関数の一つであり、&lt;br &#x2F;&gt;
&lt;strong&gt;テーブル内の行数または特定の条件に一致する行数をカウントするために使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的なCOUNT関数の構文は以下の通りです。&lt;br &#x2F;&gt;
&lt;code&gt;COUNT(列名または*)&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; COUNT&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリはemployeesテーブルの全行数をカウントします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; COUNT&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; テーブル名 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; 条件;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;特定の条件に一致する行数をカウントしたい場合は、&lt;br &#x2F;&gt;
上記のようなクエリーにします。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【SQLデータ型】Where句と条件式における演算子</title>
        <published>2024-01-18T00:00:00+00:00</published>
        <updated>2024-02-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/data-type-operator/"/>
        <id>https://reisuta.com/data-type-operator/</id>
        
        <content type="html" xml:base="https://reisuta.com/data-type-operator/">&lt;p&gt;本記事では、&lt;br &#x2F;&gt;
SQLにおけるデータ型とWhere句、&lt;br &#x2F;&gt;
条件式、様々な演算子について解説します。&lt;&#x2F;p&gt;
&lt;p&gt;SQLのdockerにおける環境構築、&lt;br &#x2F;&gt;
4大命令の簡単な解説については、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;db-sql-basic&#x2F;&quot;&gt;前回のこちらの記事&lt;&#x2F;a&gt;や動画を御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Bd4QUKu4PHo&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;detaxing&quot;&gt;データ型&lt;&#x2F;h2&gt;
&lt;p&gt;SQLにおけるデータ型は、データベース内の各列（カラム）に格納されるデータの種類を定義します。&lt;br &#x2F;&gt;
このデータ型によって、例えば数値を管理するデータに&lt;br &#x2F;&gt;
文字列などが混入することを防いで、データの安全性を保つことに寄与しています。&lt;&#x2F;p&gt;
&lt;p&gt;データ型には、数値、文字列、日付などがあります。&lt;&#x2F;p&gt;
&lt;p&gt;プログラミング言語の経験がある人は、&lt;br &#x2F;&gt;
データ型と言われたら、ピンと来るかと思います。&lt;br &#x2F;&gt;
基本的には、それらと似たような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、SQLは、他のプログラミング言語に比べても、&lt;br &#x2F;&gt;
割とデータ型が細かい印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptとかに慣れていると、&lt;br &#x2F;&gt;
データ型の多さに圧倒されるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;それに比べて、&lt;br &#x2F;&gt;
各DBMS製品によっても、&lt;br &#x2F;&gt;
微妙にデータ型が違ったりするので、&lt;br &#x2F;&gt;
正直全部をご紹介するのは無理です笑&lt;&#x2F;p&gt;
&lt;p&gt;それに、実際によく使うデータ型は、&lt;br &#x2F;&gt;
割とパターンが決まっているので、&lt;br &#x2F;&gt;
それらを押さえれば、意外と十分だったりします。&lt;&#x2F;p&gt;
&lt;p&gt;どういうデータ型があるのか、&lt;br &#x2F;&gt;
一覧で知りたいという場合は、&lt;br &#x2F;&gt;
その都度、そのDBMS製品のドキュメントを確認する形で&lt;br &#x2F;&gt;
問題ないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事ではMySQLのデータ型を取り上げます。&lt;br &#x2F;&gt;
細かいところは、他のDBMS製品と違ったりするかもしれませんが、&lt;br &#x2F;&gt;
大枠は同じかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;data-types.html&quot;&gt;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;data-types.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shu-zhi-detaxing&quot;&gt;数値データ型&lt;&#x2F;h3&gt;
&lt;p&gt;数値データの場合、大きく分けて、&lt;br &#x2F;&gt;
整数型と小数点型があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;data-type-operator&#x2F;8deb5b0eb7af0ffe9a98a4dcb96b3c93.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;画像出典: MySQLの公式ドキュメント&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;整数型だと、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;INT：標準の整数型。&lt;&#x2F;p&gt;
&lt;p&gt;SMALLINT：より小さな範囲の整数。&lt;&#x2F;p&gt;
&lt;p&gt;TINYINT：非常に小さな整数。&lt;&#x2F;p&gt;
&lt;p&gt;MEDIUMINT：中程度の範囲の整数。&lt;&#x2F;p&gt;
&lt;p&gt;BIGINT：非常に大きな範囲の整数。&lt;&#x2F;p&gt;
&lt;p&gt;などがあります。&lt;&#x2F;p&gt;
&lt;p&gt;これらの型は、符号付き（負の値を含む）または符号なし（正の値のみ）で使用できます。&lt;br &#x2F;&gt;
これに対して、浮動小数点型だと、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;FLOAT：単精度浮動小数点数。&lt;br &#x2F;&gt;
DOUBLE：倍精度浮動小数点数。&lt;&#x2F;p&gt;
&lt;p&gt;などがあり、固定小数点型だと&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;DECIMAL：固定小数点数&lt;&#x2F;p&gt;
&lt;p&gt;などがあります。&lt;&#x2F;p&gt;
&lt;p&gt;固定小数点と浮動小数点の大まかな違いとしては、&lt;br &#x2F;&gt;
&lt;strong&gt;その精度にあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;金融データなど、固定の小数点精度が必要な場合は DECIMAL 型を使用します。&lt;br &#x2F;&gt;
一方で、科学計算などのより広い範囲の数値で精度がそれほど重要でない場合は FLOAT または DOUBLEなど&lt;br &#x2F;&gt;
が良かったりします。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、実際のところ、&lt;br &#x2F;&gt;
この中でもよく使うのは、&lt;br &#x2F;&gt;
INTやBIGINTが圧倒的に多く、&lt;br &#x2F;&gt;
それ以外のデータ型も使わないわけではありませんが、&lt;br &#x2F;&gt;
上記2つに比べると、遭遇シーンは下がると思うので、&lt;br &#x2F;&gt;
基礎というレベルでは、そこまで全てを覚える必要性はあまりないかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wen-zi-lie-detaxing&quot;&gt;文字列データ型&lt;&#x2F;h3&gt;
&lt;p&gt;次に文字列データ型について紹介します。&lt;br &#x2F;&gt;
有名どころとしては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;CHAR (固定長の文字列。CHAR(5)は、5文字の文字列を格納します。)&lt;br &#x2F;&gt;
VARCHAR (可変長の文字列。VARCHAR(255)は、最大255文字の文字列を格納できます。)&lt;br &#x2F;&gt;
TEXT型 (長い文字列用。TINYTEXT、MEDIUMTEXT、LONGTEXT：さまざまなサイズの非常に長い文字列用。)&lt;&#x2F;p&gt;
&lt;p&gt;などがあります。&lt;br &#x2F;&gt;
一応これ以外にも、BLOB型とかBINARY型とかありますが、&lt;br &#x2F;&gt;
基礎のレベルじゃなくなるので割愛します。&lt;&#x2F;p&gt;
&lt;p&gt;上記の3つの型については、&lt;br &#x2F;&gt;
遭遇シーンが多いと思うので、&lt;br &#x2F;&gt;
まずはこれらをおさえるだけでも十分だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;さて、固定長と可変長というキーワードがありますが、&lt;br &#x2F;&gt;
これらの違いは何かというと、&lt;br &#x2F;&gt;
&lt;mark&gt;データ型の領域を中身のサイズに合わせて調整するか、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;しないかという感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;はい、これじゃ意味わからないですよね。&lt;br &#x2F;&gt;
具体例として、&lt;br &#x2F;&gt;
CHAR(10)とVARCHAR(10)があるとします。&lt;&#x2F;p&gt;
&lt;p&gt;これはそれぞれ、10文字までのデータ型を格納することができます。&lt;&#x2F;p&gt;
&lt;p&gt;違いは、例えば「test」などのように、&lt;br &#x2F;&gt;
10文字に満たない文字を格納した場合です。&lt;&#x2F;p&gt;
&lt;p&gt;固定長のCHARの場合は、&lt;br &#x2F;&gt;
&lt;mark&gt;あらかじめ10文字文の領域を確保しているため、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;「test」というデータが来たら、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;10文字に満たない部分は、空白が追加されます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;すなわち、「test 」みたいなデータが入るイメージです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、可変長のVARCHARの場合は、&lt;br &#x2F;&gt;
データである「test」というサイズに合わせて、&lt;br &#x2F;&gt;
データを格納するので、&lt;br &#x2F;&gt;
&lt;mark&gt;「test」と空白は追加されず、そのままの長さで格納します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これが固定長と可変長の違いです。&lt;&#x2F;p&gt;
&lt;p&gt;まあでも、一般的には、&lt;br &#x2F;&gt;
ここまで厳密な違いを考慮しているかというと微妙で、&lt;br &#x2F;&gt;
小さい文字列データ型なら、CHAR、&lt;br &#x2F;&gt;
普通ぐらいなら、VARCHAR、&lt;br &#x2F;&gt;
長いテキストデータなら、TEXTという感じで、&lt;br &#x2F;&gt;
分けていることが多い気がします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ri-shi-detaxing&quot;&gt;日時データ型&lt;&#x2F;h3&gt;
&lt;p&gt;次に日時データ型です。&lt;br &#x2F;&gt;
主なものとしては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;DATE：日付のみを格納（例: 2024-01-15）。&lt;br &#x2F;&gt;
TIME：時間のみを格納。&lt;br &#x2F;&gt;
DATETIME：日付と時刻を格納。&lt;br &#x2F;&gt;
TIMESTAMP：UNIXタイムスタンプを格納。&lt;br &#x2F;&gt;
YEAR：年を格納。&lt;&#x2F;p&gt;
&lt;p&gt;などという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;正直、日時データ型だけで、&lt;br &#x2F;&gt;
こんなにいろいろ種類があるのは、&lt;br &#x2F;&gt;
あまりない気がします。&lt;&#x2F;p&gt;
&lt;p&gt;これだけ色々あると、&lt;br &#x2F;&gt;
もはや基礎と呼べるか怪しいですが、&lt;br &#x2F;&gt;
日時データ型自体はよく出てくるので、&lt;br &#x2F;&gt;
軽くご紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;ここに関しては、&lt;br &#x2F;&gt;
突き詰めると細かすぎるので、&lt;br &#x2F;&gt;
詳細は、下記のドキュメントに譲ります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;date-and-time-types.html&quot;&gt;https:&#x2F;&#x2F;dev.mysql.com&#x2F;doc&#x2F;refman&#x2F;8.0&#x2F;ja&#x2F;date-and-time-types.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;detaxing-noxuan-ze-nituite&quot;&gt;データ型の選択について&lt;&#x2F;h3&gt;
&lt;p&gt;適切なデータ型を選択することは、ストレージの効率、パフォーマンスの最適化、&lt;br &#x2F;&gt;
およびデータの正確性を保証するために重要です。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、不必要に大きなデータ型を選択すると、&lt;br &#x2F;&gt;
ストレージ領域の無駄遣いやパフォーマンスの低下を引き起こす可能性があります。&lt;&#x2F;p&gt;
&lt;p&gt;一方で、データに合わない小さなデータ型を選択すると、データの切り捨てや精度の損失が発生する恐れがあります。&lt;br &#x2F;&gt;
したがって、データの特性を理解し、それに応じて最も適切なデータ型を選択することが不可欠です。&lt;&#x2F;p&gt;
&lt;p&gt;ストレージ効率として、 適切なデータ型を選択することで、データベースのストレージ使用量を最適化できます。&lt;br &#x2F;&gt;
例えば、小さな整数を格納するために INT を使用するよりも TINYINT を使用する方が効率的です。&lt;&#x2F;p&gt;
&lt;p&gt;先述しましたが、小数とかの場合は必要な精度を考慮することが重要で、&lt;br &#x2F;&gt;
金融データなど正確な小数点以下の値が必要な場合、DECIMAL型の使用が良いのかと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;whereju&quot;&gt;Where句&lt;&#x2F;h2&gt;
&lt;p&gt;Where句は、SQLクエリで特定の条件に一致する行を選択するために使用されます。&lt;br &#x2F;&gt;
Whereを指定しないと、すべての行が対象になるので、&lt;br &#x2F;&gt;
&lt;strong&gt;DELETEやUPDATEとかでは、ほぼ必須みたいなものになるかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;データベースから特定のデータを抽出する際にWhere句は不可欠で、&lt;br &#x2F;&gt;
条件に一致するデータのみを取得することで、効率的なデータ管理が可能になります。&lt;&#x2F;p&gt;
&lt;p&gt;4大命令において、INSERTの場合は、&lt;br &#x2F;&gt;
新規追加になるため、「どの行」を指定する必要がないので、&lt;br &#x2F;&gt;
Where句は使用することができません。&lt;&#x2F;p&gt;
&lt;p&gt;肝心のWhereの使い方としては、&lt;br &#x2F;&gt;
後ろに条件式を記述し、絞り込みを行います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tiao-jian-shi&quot;&gt;条件式&lt;&#x2F;h3&gt;
&lt;p&gt;条件式は、主にWhere句内で使用され、特定の条件を指定するために用いられる式です。&lt;br &#x2F;&gt;
文法は、&lt;strong&gt;Where 条件式&lt;&#x2F;strong&gt;という感じです。&lt;br &#x2F;&gt;
条件式は、結果が真か偽になるものなので、&lt;br &#x2F;&gt;
他のプログラミング言語における、booleanと思っていただければ、&lt;br &#x2F;&gt;
問題ないかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;たとえば、hiredate &amp;gt; &#x27;2023-01-01&#x27;なら、問題ない一方、&lt;br &#x2F;&gt;
hiredate + &#x27;2023-01-01&#x27;みたいなものは記述できません。&lt;&#x2F;p&gt;
&lt;p&gt;他のプログラミング言語だと、&lt;br &#x2F;&gt;
後者の場合でもboolean変換できますが、&lt;br &#x2F;&gt;
SQLの場合、あくまで「どの行」を指定するための、&lt;br &#x2F;&gt;
Where句なので、こういう変化球は使えないという感じですかね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;2023-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、2023年1月1日以降に雇用された従業員のデータを選択します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yan-suan-zi&quot;&gt;演算子&lt;&#x2F;h3&gt;
&lt;p&gt;上記のクエリーで出てきた、&lt;br &#x2F;&gt;
Where句内の、&amp;gt;のように、&lt;br &#x2F;&gt;
条件式で使う演算子には様々なものがあります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bi-jiao-yan-suan-zi&quot;&gt;比較演算子&lt;&#x2F;h4&gt;
&lt;p&gt;まず&amp;gt;のような演算子は、&lt;br &#x2F;&gt;
比較演算子といい、&lt;br &#x2F;&gt;
下記のようなものがあります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;= (等しい)&lt;br &#x2F;&gt;
&amp;lt; (左辺は右辺より小さい)&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;(左辺は右辺より大きい)&lt;br &#x2F;&gt;
&amp;lt;= (左辺は右辺の値以下)&lt;br &#x2F;&gt;
= (左辺は右辺の値以上)&lt;br &#x2F;&gt;
&amp;lt;&amp;gt; または != (左右の値が等しくない)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;上5つは直感的だと思いますが、&lt;br &#x2F;&gt;
&amp;lt;&amp;gt;や!=は見慣れないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;これらは等しくないことを表します。&lt;&#x2F;p&gt;
&lt;p&gt;また、NULLのデータに対して、&lt;br &#x2F;&gt;
=などの比較演算子では判断できないというのもあり、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;NULLのデータを探したいときは、&lt;br &#x2F;&gt;
IS NULLやIS NOT NULL演算子を使います&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、これらの=などの比較演算子以外のものとしては、&lt;br &#x2F;&gt;
下記のようなものがあります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;LIKE (パターンマッチング、部分一致)&lt;br &#x2F;&gt;
BETWEEN (範囲指定)&lt;br &#x2F;&gt;
IN&lt;&#x2F;p&gt;
&lt;h4 id=&quot;likeyan-suan-zi&quot;&gt;LIKE演算子&lt;&#x2F;h4&gt;
&lt;p&gt;LIKE演算子の場合、&lt;br &#x2F;&gt;
パターン文字というものを使うことができます。&lt;br &#x2F;&gt;
これは、プログラミング言語でいう、&lt;br &#x2F;&gt;
正規表現とかワイルドカードみたいなイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;%と_の2つがあり、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;%は、任意の0文字以上の文字列を表し、&lt;br &#x2F;&gt;
_は任意の一文字を表します。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE name LIKE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;%yamada%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリでは、パターン文字として、%を使っているので、&lt;br &#x2F;&gt;
yamadaの前後に0文字以上の文字列があるものをSelectするという感じになります。&lt;br &#x2F;&gt;
すなわち、名前に「yamada」という文字が含まれる従業員を選択します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、yamada100%みたいな、&lt;br &#x2F;&gt;
%自体が含まれる行を抽出したい場合は、&lt;br &#x2F;&gt;
そのまま、LIKE &#x27;%yamada100%&#x27;みたいにすると、&lt;br &#x2F;&gt;
最後の%がパターン文字として認識されてしまうので、&lt;br &#x2F;&gt;
エスケープという作業をして上げる必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE name LIKE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;%yamada100$%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; ESCAPE &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;$&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;ここで出てきたESCAPE句というもので、指定した$という文字のあとは、&lt;br &#x2F;&gt;
ただの文字として扱うことができるので、&lt;br &#x2F;&gt;
上記のクエリーで元気100%の行を抽出することができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;betweenyan-suan-zi&quot;&gt;BETWEEN演算子&lt;&#x2F;h4&gt;
&lt;p&gt;次にBETWEEN演算子についてです。&lt;br &#x2F;&gt;
BETWEEN演算子は、間という意味の通り、&lt;br &#x2F;&gt;
範囲指定したい際に使用します。&lt;&#x2F;p&gt;
&lt;p&gt;文法的には、&lt;br &#x2F;&gt;
&lt;strong&gt;BETWEEN 値1 AND 値2という感じで記述し、&lt;br &#x2F;&gt;
値1以上かつ値2以下のとき、真となります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;BETWEEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;2023-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; AND&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;2023-12-31&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、2023年1月1日から2023年12月31日までの間に雇用された従業員を選択します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;in-not-inyan-suan-zi&quot;&gt;IN &#x2F; NOT IN演算子&lt;&#x2F;h4&gt;
&lt;p&gt;IN演算子は、指定されたリスト内にあるいずれかの値に一致する行を選択するために使用されます。&lt;br &#x2F;&gt;
これは、複数の候補値の中から一致するものを見つける際に非常に便利です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; ID &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;IN&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、ID が3、5、7のいずれかである従業員を選択します。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、NOT INは逆で、&lt;br &#x2F;&gt;
指定されたリストに含まれないすべての行を選択するために使用されます。&lt;br &#x2F;&gt;
これは、特定の値を除外したい場合に有用です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; ID &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;NOT IN&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、ID が3、5、7以外の従業員を選択します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;lun-li-yan-suan-zi&quot;&gt;論理演算子&lt;&#x2F;h4&gt;
&lt;p&gt;Where句の条件式において、&lt;br &#x2F;&gt;
複数の条件式を書きたい場合、&lt;br &#x2F;&gt;
ANDやORのような論理演算子を使用することで&lt;br &#x2F;&gt;
実現することができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ANDは2つの条件式の両方が真のとき、真になり、&lt;br &#x2F;&gt;
ORは2つの条件式のどちらかが真なら、真となります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE&lt;&#x2F;span&gt;&lt;span&gt; hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;2023-01-01&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; AND name LIKE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;%yamada%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、2023年1月1日以降に雇用され、名前に「山田」を含む従業員を選択します。&lt;&#x2F;p&gt;
&lt;p&gt;また、NOT演算子というものもあり、&lt;br &#x2F;&gt;
これを使うと、真偽値を反転させることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT * FROM&lt;&#x2F;span&gt;&lt;span&gt; employees &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;WHERE NOT&lt;&#x2F;span&gt;&lt;span&gt; (salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 50000&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、給与が50,000より大きくない（つまり50,000以下の）従業員を選択します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ji-he-yan-suan-zi&quot;&gt;集合演算子&lt;&#x2F;h4&gt;
&lt;p&gt;SQLの集合演算子は、複数のクエリ結果セットを組み合わせたり、比較したりする際に使用されます。&lt;br &#x2F;&gt;
主な集合演算子にはUNION、EXCEPT（またはMINUS）、INTERSECTがあります。&lt;&#x2F;p&gt;
&lt;p&gt;UNIONの場合、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; employee_id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; sales_department&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;UNION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; employee_id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; marketing_department;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように使うことができます。&lt;&#x2F;p&gt;
&lt;p&gt;UNION演算子は、二つのクエリ結果セットの全ての行を結合します。重複する行は一つにまとめられます。&lt;br &#x2F;&gt;
&lt;strong&gt;平たく言うと、和集合になります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
このクエリは、販売部門とマーケティング部門の両方から従業員IDを取得し、重複する従業員IDは排除して結果を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、結合するクエリのカラム数とデータ型が一致していないと行けないので、&lt;br &#x2F;&gt;
正直集合演算子を使う場面は限定的になるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;上記のサンプルコードのように、&lt;br &#x2F;&gt;
2つのテーブル構造がある程度似ていて、&lt;br &#x2F;&gt;
抽出する際は、揃える必要があるので、&lt;br &#x2F;&gt;
例えば、ほぼ同じデータ構造のテーブルが複数ある際の、&lt;br &#x2F;&gt;
総合的な分析とかで使うのが一番使うシーンなのかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;このUNIONに対して、&lt;br &#x2F;&gt;
EXCEPTは差集合、INTERSECTは積集合という位置づけになります。&lt;&#x2F;p&gt;
&lt;p&gt;集合の種類が変わるだけで、&lt;br &#x2F;&gt;
文法的にはほぼ同様です。&lt;&#x2F;p&gt;
&lt;p&gt;差集合の場合、最初のクエリの結果セットから、&lt;br &#x2F;&gt;
二番目のクエリの結果セットに含まれる行を除外します&lt;&#x2F;p&gt;
&lt;p&gt;積集合は、和集合と同じく、&lt;br &#x2F;&gt;
SELECT文の順番はあまり関係なく、&lt;br &#x2F;&gt;
共通行を取得してくれます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;caseyan-suan-zi&quot;&gt;case演算子&lt;&#x2F;h4&gt;
&lt;p&gt;SQLのCASE演算子は、条件に基づいて異なる値を返すために使用されます。&lt;br &#x2F;&gt;
これは、条件分岐の機能をクエリに組み込む際に非常に便利です。&lt;&#x2F;p&gt;
&lt;p&gt;まあ他のプログラミング言語における、&lt;br &#x2F;&gt;
CASEと似ているといえば似てますかね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;CASE文は、特定の条件に基づいて異なる結果を返す際に使用され、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;WHEN-THEN句を使用して、特定の条件を指定し、それに対応する結果を定義します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ELSE句を使用して、どのWHEN条件にも一致しない場合のデフォルト値を指定できます。&lt;br &#x2F;&gt;
CASE文はSELECT、UPDATE、ORDER BYなどのさまざまな場所で使用できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SELECT&lt;&#x2F;span&gt;&lt;span&gt; id, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;       CASE&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;           WHEN&lt;&#x2F;span&gt;&lt;span&gt; salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 50000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; THEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;High salary&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;           WHEN&lt;&#x2F;span&gt;&lt;span&gt; salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; THEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Medium salary&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;           ELSE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Low salary&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;       END as&lt;&#x2F;span&gt;&lt;span&gt; SalaryCategory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; employees;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、employeesテーブルの従業員ごとに給与カテゴリを判断し、それに応じたラベルを付けて表示します。&lt;&#x2F;p&gt;
&lt;p&gt;UPDATEとかでの使用例としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;UPDATE&lt;&#x2F;span&gt;&lt;span&gt; employees&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;SET&lt;&#x2F;span&gt;&lt;span&gt; bonus &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;= CASE&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;               WHEN&lt;&#x2F;span&gt;&lt;span&gt; performance &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Excellent&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; THEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;               WHEN&lt;&#x2F;span&gt;&lt;span&gt; performance &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Good&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; THEN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 500&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;               ELSE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;            END&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このクエリは、employeesテーブルの従業員のパフォーマンスに基づいてボーナス額を更新します。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、CASE演算子は、&lt;br &#x2F;&gt;
実際のところ、たまに使用する程度ですが、&lt;br &#x2F;&gt;
面接の技術テストとかで聞かれやすいトピックな気がしています。&lt;&#x2F;p&gt;
&lt;p&gt;私はCASE演算子について即答できなかったので、&lt;br &#x2F;&gt;
落とされるということを何度か経験しました(苦笑い)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chu-qi-gou-zhu-yong-sqlhuairu&quot;&gt;初期構築用SQLファイル&lt;&#x2F;h2&gt;
&lt;p&gt;本記事と同じような状態で、&lt;br &#x2F;&gt;
試す場合は、下記のsqlファイルを使うと&lt;br &#x2F;&gt;
スムーズかと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;sql&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;CREATE DATABASE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; testdb&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt; testdb;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;create table&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; employees&lt;&#x2F;span&gt;&lt;span&gt; (id &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;INT&lt;&#x2F;span&gt;&lt;span&gt; AUTO_INCREMENT &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;PRIMARY KEY&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; varchar&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span&gt;), salary &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;, bonus &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;, department &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;varchar&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span&gt;), performance &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;char&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;25&lt;&#x2F;span&gt;&lt;span&gt;), hiredate &lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;date&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; employees (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;, hiredate, salary, bonus, department, performance) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;yamada&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2023-09-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;60000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;sales&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Good&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; employees (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;, hiredate, salary, bonus, department, performance) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;satou&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2023-04-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;100&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;sales&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Good&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;insert into&lt;&#x2F;span&gt;&lt;span&gt; employees (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;, hiredate, salary, bonus, department, performance) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;values&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;yamada100%&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;2024-09-12&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;60000&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;30&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;HR&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Excellent&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このファイルを作成したら、&lt;br &#x2F;&gt;
コンテナ立ち上げ時に、&lt;br &#x2F;&gt;
docker cpをします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker cp test.sql mysql-sample:&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで、mysql-sampleコンテナの&lt;br &#x2F;&gt;
ルートパスにファイルがコピーされました。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、&lt;code&gt;docker exec -it mysql-sample &#x2F;bin&#x2F;bash&lt;&#x2F;code&gt;で&lt;br &#x2F;&gt;
コンテナに入って、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mysql -u root -p &amp;lt; test.sql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でファイルを実行することができます。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;スッキリわかるSQL入門 第3版 ドリル256問付き! (スッキリわかる入門シリーズ)&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;4295013390&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80%20%E7%AC%AC3%E7%89%88%20%E3%83%89%E3%83%AA%E3%83%AB256%E5%95%8F%E4%BB%98%E3%81%8D!%20(%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA)&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;511aruKlsBL._SL500_.jpg&quot; alt=&quot;失敗から学ぶRDBの正しい歩き方 Software Design plus&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;失敗から学ぶRDBの正しい歩き方 Software Design plus&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B07P8PMHLL&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;%E5%A4%B1%E6%95%97%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6RDB%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%84%E6%AD%A9%E3%81%8D%E6%96%B9%20Software%20Design%20plus&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;51sApXJW7HL._SL500_.jpg&quot; alt=&quot;達人に学ぶDB設計 徹底指南書&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;達人に学ぶDB設計 徹底指南書&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B00EE1XPAI&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6DB%E8%A8%AD%E8%A8%88%20%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;SQLアンチパターン&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;4873115892&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Docker DBコンテナ構築】データベースの種類やSQLの概要解説</title>
        <published>2024-01-11T00:00:00+00:00</published>
        <updated>2024-01-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/db-sql-basic/"/>
        <id>https://reisuta.com/db-sql-basic/</id>
        
        <content type="html" xml:base="https://reisuta.com/db-sql-basic/">&lt;h2 id=&quot;detabesu-db-toha&quot;&gt;データベース(DB)とは?&lt;&#x2F;h2&gt;
&lt;p&gt;あまりに身近すぎて、&lt;br &#x2F;&gt;
今更感がすごいですが、&lt;br &#x2F;&gt;
改めてデータベースとは何でしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;データベースは、様々なデータを整理して格納するためのシステムですね。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
割とそのまんまですね&lt;&#x2F;p&gt;
&lt;p&gt;非エンジニアで、データベースが良くわからないという人でも、&lt;br &#x2F;&gt;
よくドラマとかで、&lt;br &#x2F;&gt;
「データベースから顧客情報から流出したぞ！」とか、&lt;br &#x2F;&gt;
「A企業のデータベースを見れば極秘情報がわかるかも」みたいな、&lt;br &#x2F;&gt;
ハッキングとかサスペンスとかがたまに出てくるので、&lt;br &#x2F;&gt;
イメージ自体はわきやすいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、データを保存するだけなら、&lt;br &#x2F;&gt;
別にメモ帳とかエクセルとかでも良いのではないか？&lt;br &#x2F;&gt;
みたいな疑問ももしかしたら生じるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、データの種類によっては、&lt;br &#x2F;&gt;
エクセルとかで保存するケースもあると思いますし、&lt;br &#x2F;&gt;
実際は、併用しているところも多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;データベースの特徴として、&lt;br &#x2F;&gt;
これから解説しますが、&lt;br &#x2F;&gt;
&lt;strong&gt;SQLというデータベースを操作する言語が使えるということがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このSQLを使うと、&lt;br &#x2F;&gt;
大量のデータの検索や更新、削除などを容易に行うことができます。&lt;&#x2F;p&gt;
&lt;p&gt;エクセルとかで大量のデータを扱う場合、&lt;br &#x2F;&gt;
どうしても検索性や更新性が下がることがほとんどで、&lt;br &#x2F;&gt;
特にデータを書き換えたりする必要がある場合、&lt;br &#x2F;&gt;
エクセルだとかなり煩雑になるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;データベースの場合、データを書き換えるには、&lt;br &#x2F;&gt;
Updateというsqlを使う必要があるため、&lt;br &#x2F;&gt;
エクセルのように気軽に編集出来るわけではありません。&lt;br &#x2F;&gt;
(エクセルであるある(?)な、あれ間違って編集しちまったよ現象は、&lt;br &#x2F;&gt;
防げますね)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、データの堅牢性に貢献してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;また、データベースは、&lt;br &#x2F;&gt;
プログラムからもアクセスしやすく、&lt;br &#x2F;&gt;
バックエンド言語などを介して、&lt;br &#x2F;&gt;
データベースを更新したりすることが多いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これにより、大量のデータを効率的に管理し、必要に応じて迅速にアクセスできます。&lt;br &#x2F;&gt;
データベースは、企業や組織が顧客情報、商品データ、取引記録などを保存するのに広く使用されています。&lt;&#x2F;p&gt;
&lt;p&gt;あと、これは完全に推測ですが、&lt;br &#x2F;&gt;
エクセルというアプリケーション自体、&lt;br &#x2F;&gt;
内部的にはデータベースを使っているはずで、&lt;br &#x2F;&gt;
エクセルのデータをエクセルを作っている開発元のDBに&lt;br &#x2F;&gt;
データが格納されているという構造になっているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;少なくともメモ帳とかに関しては、&lt;br &#x2F;&gt;
データはDBに保存されているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、DBとは、こうした身近に使っているアプリケーションの、&lt;br &#x2F;&gt;
保存先と思っていただければ大丈夫です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;detabesunozhong-lei&quot;&gt;データベースの種類&lt;&#x2F;h3&gt;
&lt;p&gt;データベースには様々な種類があります。&lt;br &#x2F;&gt;
主なものには、リレーショナルデータベース（RDBMS）、非リレーショナルデータベース（NoSQL）、&lt;br &#x2F;&gt;
オブジェクト指向データベースなどがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;この中でも著名なのが、リレーショナルデータベースで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;リレーショナルデータベースは、表形式でデータを整理し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;SQL（Structured Query Language）を使用してデータを操作します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;非リレーショナルデータベースは、柔軟なデータ構造を持ち、&lt;br &#x2F;&gt;
ビッグデータやリアルタイム処理など、パフォーマンスが求められる要件に適していると思います。&lt;&#x2F;p&gt;
&lt;p&gt;非リレーショナルデータベースについては、&lt;br &#x2F;&gt;
これらの一種である、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;redis-overview&#x2F;&quot;&gt;Redisの概要記事&lt;&#x2F;a&gt;で少し触れているので、&lt;br &#x2F;&gt;
よろしければご参考ください&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1019&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rdbmsnozhong-lei&quot;&gt;RDBMSの種類&lt;&#x2F;h3&gt;
&lt;p&gt;さて、これらのデータベースの種類においても、&lt;br &#x2F;&gt;
最も一般的なものとして、リレーショナルデータベースがあることは、&lt;br &#x2F;&gt;
先述のとおりです。&lt;&#x2F;p&gt;
&lt;p&gt;このリレーショナルデータベースにも色々種類があり、&lt;br &#x2F;&gt;
有名どころを紹介します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mysql&quot;&gt;MySQL&lt;&#x2F;h4&gt;
&lt;p&gt;データベースといったら、これって言われるぐらい、&lt;br &#x2F;&gt;
&lt;strong&gt;おそらく最も有名なRDBMSかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;PHP環境下で使われることが多い印象がありますが、&lt;br &#x2F;&gt;
普通にRailsとかでも使われるますし、&lt;br &#x2F;&gt;
本当に幅広く使われている著名なデータベースです。&lt;&#x2F;p&gt;
&lt;p&gt;MySQLは、その柔軟性、信頼性、効率性により、中小規模のアプリケーションに適しています。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;postgresql&quot;&gt;PostgreSQL&lt;&#x2F;h4&gt;
&lt;p&gt;お次は、PostgreSQLで、&lt;br &#x2F;&gt;
ポスグレ、ポストグレなどと呼ぶことが多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;これは、私の印象ではRails環境で使うことが多いDBで、&lt;br &#x2F;&gt;
MySQLと同じぐらい広く使われている、&lt;br &#x2F;&gt;
こちらも著名なDBの一つです。&lt;&#x2F;p&gt;
&lt;p&gt;高度な機能（ストアドプロシージャ、トリガー、ビューなど）を備えています。&lt;br &#x2F;&gt;
大規模なデータベースシステムや複雑なクエリに適しており、&lt;br &#x2F;&gt;
企業レベルのアプリケーションで広く採用されています。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;oracle-database&quot;&gt;Oracle Database&lt;&#x2F;h4&gt;
&lt;p&gt;これも有名ではありますが、&lt;br &#x2F;&gt;
私は使ったことはありません。&lt;&#x2F;p&gt;
&lt;p&gt;Oracle Databaseは、企業向けの高機能RDBMSです。&lt;br &#x2F;&gt;
大規模なトランザクション処理、データウェアハウジング、高度なアナリティクス機能を提供します。&lt;br &#x2F;&gt;
ライセンス費用がかかるため、主に大企業や金融機関で使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;Oracle DatabaseとMySQLとかとの最大の違いは、&lt;br &#x2F;&gt;
&lt;strong&gt;こちらは商用製品だということです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;MySQLやPostgreSQLはOSSでしたが、&lt;br &#x2F;&gt;
こちらは異なります。&lt;&#x2F;p&gt;
&lt;p&gt;どちらも双方メリデメがあるので、&lt;br &#x2F;&gt;
なんとも言えませんが、&lt;br &#x2F;&gt;
最近の風潮としては、&lt;br &#x2F;&gt;
OSSのDBのクオリティも十分高いことから、&lt;br &#x2F;&gt;
MySQLやPostgreSQLの方が人気が高まっているような印象はあります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;microsoft-sql-server&quot;&gt;Microsoft SQL Server&lt;&#x2F;h4&gt;
&lt;p&gt;こちらもOracleと同じく、&lt;br &#x2F;&gt;
商用製品のDBです。&lt;&#x2F;p&gt;
&lt;p&gt;Microsoft SQL Serverは、主にWindows環境で使用されるRDBMSです。&lt;br &#x2F;&gt;
統合された環境、分析ツール、ビジネスインテリジェンス機能が特徴で、&lt;br &#x2F;&gt;
中規模から大規模の企業向けのアプリケーションに適しています。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;sqlite&quot;&gt;SQLite&lt;&#x2F;h4&gt;
&lt;p&gt;こちらはOSSです。&lt;&#x2F;p&gt;
&lt;p&gt;SQLiteは、軽量で独立したデータベースエンジンです。&lt;br &#x2F;&gt;
外部のサーバーを必要とせず、アプリケーションに組み込むことができます。&lt;br &#x2F;&gt;
モバイルアプリケーションや組み込みシステムでの使用に適しています。&lt;&#x2F;p&gt;
&lt;p&gt;RailsのデフォルトのDBでもあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Rails環境で、&lt;br &#x2F;&gt;
このDBをそのまま使用して本番環境を構築しているケースは、&lt;br &#x2F;&gt;
私はまだ見たことがありません。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mariadb&quot;&gt;MariaDB&lt;&#x2F;h4&gt;
&lt;p&gt;MariaDBは、MySQLから派生したオープンソースのRDBMSです。&lt;br &#x2F;&gt;
MySQLと互換性がありながら、より多くのストレージエンジンや新機能を提供します。&lt;br &#x2F;&gt;
コミュニティ主導の開発が特徴で、透明性とイノベーションを重視しています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sqltoha-4da-ming-ling&quot;&gt;SQLとは?4大命令&lt;&#x2F;h2&gt;
&lt;p&gt;さて、データベースの概要については、&lt;br &#x2F;&gt;
触れたのでお次は、そんなデータベースの重要概念である、&lt;br &#x2F;&gt;
SQLについて軽く触れます。&lt;&#x2F;p&gt;
&lt;p&gt;これも現役エンジニアの方からすると、&lt;br &#x2F;&gt;
常識すぎますが、SQL（Structured Query Language）は、&lt;br &#x2F;&gt;
&lt;mark&gt;データベースでデータを操作するための標準的な言語です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;SQLを使用することで、データの検索、追加、更新、削除などが可能になります。&lt;br &#x2F;&gt;
SQLはリレーショナルデータベース管理システムで広く使用されており、データベースの操作には不可欠なツールです。&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアの場合、&lt;br &#x2F;&gt;
トレンドによっていろんな言語の文法を覚えたりみたいな、&lt;br &#x2F;&gt;
学習コストがありますが、&lt;br &#x2F;&gt;
SQLは、基本的にあまり文法が変わらず、&lt;br &#x2F;&gt;
かといってDBは基本的にまだまだ使うことが多いソフトウェアなので、&lt;br &#x2F;&gt;
一度身につけてしまうとずっと役に立つかなり学習のコスパがいいものでも有名です。&lt;&#x2F;p&gt;
&lt;p&gt;よくベテランエンジニアの方が、&lt;br &#x2F;&gt;
なにか一つだけ勉強するとしたらSQLをやるということもあるように、&lt;br &#x2F;&gt;
一度身につけてしまえば、ずっと役に立ち、&lt;br &#x2F;&gt;
フロントエンドのように陳腐化する可能性が小さいというのは大きな魅力ですよね。&lt;&#x2F;p&gt;
&lt;p&gt;下記にて、SQLの基本文法を少しだけ紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;最後の章で、&lt;br &#x2F;&gt;
&lt;strong&gt;dockerでのdbの環境構築手順について触れているので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;実際に手元で動かして確認したい方は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そちらをやってからこちらに戻っていただけるとよいかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;読むだけで十分な方は、&lt;br &#x2F;&gt;
このまま進めてもらって大丈夫です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;selectwen&quot;&gt;Select文&lt;&#x2F;h3&gt;
&lt;p&gt;まず最初は、Select文です。&lt;&#x2F;p&gt;
&lt;p&gt;SQLといったらSelectでしょって思い浮かべる方も多い、&lt;br &#x2F;&gt;
おそらくいちばんメジャーなSQLの文法です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SELECT * FROM users;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このような文法です。&lt;&#x2F;p&gt;
&lt;p&gt;これはusersテーブルの全ての列を取得します。&lt;&#x2F;p&gt;
&lt;p&gt;取得する列を絞ることもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;select name from users;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、上記のように、&lt;br &#x2F;&gt;
&lt;mark&gt;SELECTと大文字で書いても、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;selectと書いてもどちらでも大丈夫です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プロジェクトのルールなどに従うのが&lt;br &#x2F;&gt;
いいでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;selectは、他の4大命令と違って、&lt;br &#x2F;&gt;
db自体の内容を書き換えないため、&lt;br &#x2F;&gt;
比較的安全な操作に該当するため、&lt;br &#x2F;&gt;
使用シーンも多い印象です。&lt;&#x2F;p&gt;
&lt;p&gt;データベースのデータを確認したいときに&lt;br &#x2F;&gt;
使う構文ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;文法的には、&lt;br &#x2F;&gt;
select 列名 from テーブル名という感じになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;updatewen&quot;&gt;update文&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、update文でして、&lt;br &#x2F;&gt;
これはその名の通り、&lt;br &#x2F;&gt;
データの更新を担当するsqlです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;UPDATE users  SET name = &amp;#39;tarou&amp;#39;  WHERE name = &amp;#39;Alice&amp;#39;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、name列がAliceの行に対して、&lt;br &#x2F;&gt;
name列をtarouに更新するという命令です。&lt;&#x2F;p&gt;
&lt;p&gt;update文の基本文法としては、&lt;&#x2F;p&gt;
&lt;p&gt;update テーブル名 set 列名1 = 値1, 列名2 = 値2 .... (where句)&lt;br &#x2F;&gt;
という感じで、set句で更新する値を記載するという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;サンプルコードだと、whereという命令がありますが、&lt;br &#x2F;&gt;
これは、テーブルのどの行かを特定するための&lt;br &#x2F;&gt;
命令です。&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、name列がAliceと指定しています。&lt;br &#x2F;&gt;
&lt;strong&gt;where句自体は、select文など他の4大構文でも使います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、where句を省略すると、&lt;br &#x2F;&gt;
全行をupdateかけることになってしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;善行にupdateをかけることは、&lt;br &#x2F;&gt;
かなり少ないと思うので、&lt;br &#x2F;&gt;
基本的にはwhere句は実質必須みたいなものに、&lt;br &#x2F;&gt;
なるかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;deletewen&quot;&gt;delete文&lt;&#x2F;h3&gt;
&lt;p&gt;これは文字通り、削除の命令ですね。&lt;br &#x2F;&gt;
これは、その性質上、かなり慎重に行わないと&lt;br &#x2F;&gt;
大変なことになるやつなので、&lt;br &#x2F;&gt;
そこまで使用シーンは多くないかもしれません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DELETE FROM users &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WHERE name = &amp;#39;test&amp;#39;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、testという名前のデータを削除します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、deleteにおいて&lt;br &#x2F;&gt;
where句を指定しなかった場合、&lt;br &#x2F;&gt;
全データを削除してしまうため、&lt;br &#x2F;&gt;
基本的にはあまり使わないかと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;insertwen&quot;&gt;insert文&lt;&#x2F;h3&gt;
&lt;p&gt;次は、データの新規作成にあたる命令です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INSERT INTO users (name, email) VALUES (&amp;#39;Alice&amp;#39;, &amp;#39;alice@test.com&amp;#39;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、usersテーブルに、&lt;br &#x2F;&gt;
nameがAlice、emailがalice@test.comので&lt;br &#x2F;&gt;
データを作成してという命令ですね。&lt;&#x2F;p&gt;
&lt;p&gt;INTOの後にテーブル名を指定して、&lt;br &#x2F;&gt;
その後は、カッコで括って、&lt;br &#x2F;&gt;
データを挿入する列を指定し、&lt;br &#x2F;&gt;
最後は、values句似て、&lt;br &#x2F;&gt;
その列に対応して、&lt;br &#x2F;&gt;
挿入したいデータを指定するという文法です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerdedbkontenawohuan-jing-gou-zhu-suru&quot;&gt;dockerでdbコンテナを環境構築する&lt;&#x2F;h2&gt;
&lt;p&gt;sqlを試すに際し、&lt;br &#x2F;&gt;
dbの環境構築をする必要がありますが、&lt;br &#x2F;&gt;
実際にローカル環境に構築するのは、&lt;br &#x2F;&gt;
何かと煩雑なため、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;mysql&quot;&gt;dockerのmysql&lt;&#x2F;a&gt;コンテナを使用して、&lt;br &#x2F;&gt;
sqlを試してみます。&lt;&#x2F;p&gt;
&lt;p&gt;dockerについて不安がある方は、&lt;br &#x2F;&gt;
下記の記事や動画などをご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1208&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;QY6VVdlZxBQ&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h3 id=&quot;mysqlkontenanozuo-cheng&quot;&gt;MySQLコンテナの作成&lt;&#x2F;h3&gt;
&lt;p&gt;MySQLのDockerイメージを使用してコンテナを作成します。ターミナルで以下のコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run --name mysql-sample -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、最新のMySQLイメージを使用してmysql-sampleという名前のコンテナを作成し、&lt;br &#x2F;&gt;
my-secret-pwをrootユーザーのパスワードとして設定します。&lt;&#x2F;p&gt;
&lt;p&gt;コンテナが起動したら、MySQLコマンドラインツールを使用してデータベースに接続します。&lt;br &#x2F;&gt;
コンテナに以下のコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec -it mysql-sample mysql -uroot -p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;パスワードプロンプトが表示されたら、&lt;br &#x2F;&gt;
ステップ2で設定したパスワード（この例ではmy-secret-pw）を入力します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;detabesutoteburunozuo-cheng&quot;&gt;データベースとテーブルの作成&lt;&#x2F;h3&gt;
&lt;p&gt;次に、テスト用のデータベースとテーブルを作成します。&lt;br &#x2F;&gt;
MySQLプロンプトで以下のコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREATE DATABASE testdb;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;USE testdb;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これでtestdbという名前のデータベースと、&lt;br &#x2F;&gt;
usersというテーブルを作成しました。&lt;&#x2F;p&gt;
&lt;p&gt;サンプルデータをテーブルに挿入します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INSERT INTO users (name, email) VALUES (&amp;#39;Alice&amp;#39;, &amp;#39;alice@example.com&amp;#39;), (&amp;#39;Bob&amp;#39;, &amp;#39;bob@example.com&amp;#39;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最後に、SELECT文を使用してデータを取得します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SELECT * FROM users;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、usersテーブルの全てのデータを取得します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;db-sql-basic&#x2F;5fc9edbea5f96ddd7c3a6453ea124ba9.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【2024年最新版】2023年に読んだ技術書おすすめ18冊</title>
        <published>2023-12-27T00:00:00+00:00</published>
        <updated>2023-12-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/technical-book-2023/"/>
        <id>https://reisuta.com/technical-book-2023/</id>
        
        <content type="html" xml:base="https://reisuta.com/technical-book-2023/">&lt;p&gt;本記事では、私が今年(2023年)に読んだ技術書の中で、&lt;br &#x2F;&gt;
これは良かったなっていうやつを紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;技術書は、星の数ほどあるので、&lt;br &#x2F;&gt;
良いものを選ぶのは大変ですが、&lt;br &#x2F;&gt;
良いものを見つけられれば、&lt;br &#x2F;&gt;
それだけ学べることも多いので、&lt;br &#x2F;&gt;
技術書のおすすめを知りたい方はぜひともご参考ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;puroguraminguxi&quot;&gt;プログラミング系&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;masutaringulinuxsierusukuriputo&quot;&gt;マスタリングLinuxシェルスクリプト&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784814400119_1_3.jpg&quot; alt=&quot;マスタリングLinuxシェルスクリプト 第2版 Linuxコマンド、bashスクリプト、シェルプログラミング実践入門 [ Mokhtar Ebrahim ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;マスタリングLinuxシェルスクリプト 第2版 Linuxコマンド、bashスクリプト、シェルプログラミング実践入門 [ Mokhtar Ebrahim ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Linux%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%20%E7%AC%AC2%E7%89%88%20Linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%80%81bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%20%5B%20Mokhtar%20Ebrahim%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17330202&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、シェルスクリプトをもっと実践的に使うための、&lt;br &#x2F;&gt;
基本的なことを様々解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なシェルスクリプトの文法の解説から始まり、&lt;br &#x2F;&gt;
awkや正規表現など、シェルに関連する様々なことについて、&lt;br &#x2F;&gt;
広く解説しているので、このへんの技術が好きな人には、&lt;br &#x2F;&gt;
面白い本だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;シェルスクリプトを使う上で大事なことや、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ポイントなどを、コンパクトにまとめてくれている良書なので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;個人的には定期的に再読したい本です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;主に、自分のシェルスクリプトの理解度を試すバロメーターとしても&lt;br &#x2F;&gt;
いいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;本のレベルとしては、めちゃくちゃ高度というわけでもなく、&lt;br &#x2F;&gt;
かといって初心者向けというわけでもないので、&lt;br &#x2F;&gt;
標準といったところでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;個人的には、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で紹介していた、&lt;br &#x2F;&gt;
シェル・ワンライナー160本ノックの方が、&lt;br &#x2F;&gt;
より応用的かと思ったので、&lt;br &#x2F;&gt;
高度なシェルスクリプトを学びたい場合は、&lt;br &#x2F;&gt;
こちらの本の方がいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;シェルスクリプトが好きな人&lt;&#x2F;li&gt;
&lt;li&gt;シェルスクリプトのパワーをもっと活かしたい人&lt;&#x2F;li&gt;
&lt;li&gt;シェルスクリプトに関連するawkや正規表現などについても知りたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB09GTV35VJ&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;1日1問、半年以内に習得　シェル・ワンライナー160本ノック Software Design plus&lt;&#x2F;a&gt;
&lt;h3 id=&quot;shou-wodong-kasinagaraxue-butypescript&quot;&gt;手を動かしながら学ぶTypeScript&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784863543553_1_4.jpg&quot; alt=&quot;手を動かしながら学ぶ TypeScript [ 渡邊比呂樹 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;手を動かしながら学ぶ TypeScript [ 渡邊比呂樹 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E6%89%8B%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%20TypeScript%20%5B%20%E6%B8%A1%E9%82%8A%E6%AF%94%E5%91%82%E6%A8%B9%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16958781&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これは、TypeScriptの本の中でも、&lt;br &#x2F;&gt;
実際に何かを作るという作業に注力できるのは、&lt;br &#x2F;&gt;
ただ文法を学ぶのではなく、実際に何かを作って学習したいという人に&lt;br &#x2F;&gt;
おすすめの一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;本も、やや薄めで、TypeScriptについてコンパクトにまとめられているので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;速攻で学習したい人には結構良いなと感じました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本のレベル的には、まるっきりの初心者向けというわけではないですが、&lt;br &#x2F;&gt;
めちゃくちゃ難しいわけでもなく、JavaScriptの学習経験が少しでもある方なら、&lt;br &#x2F;&gt;
多分読み進められるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptを極めるってなると、この一冊だけでは足りませんが、&lt;br &#x2F;&gt;
軽く概要をサクッと学びたいっていう場合は、&lt;br &#x2F;&gt;
非常に効率的な本だと思うのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、TypeScriptについては、&lt;br &#x2F;&gt;
私も記事や動画を挙げているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;23&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;eAWj8JrU9v8&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;何かを作ってTypeScriptを学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;基本的なJavaScriptなら分かる人&lt;&#x2F;li&gt;
&lt;li&gt;薄めの書籍でサクッと学びたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;typescripttoreact-next-jsdezuo-rushi-jian-webapurikesiyonkai-fa&quot;&gt;TypeScriptとReact&#x2F;Next.jsで作る実践Webアプリケーション開発&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297129163_1_4.jpg&quot; alt=&quot;TypeScriptとReact&amp;#x2F;Next.jsでつくる実践Webアプリケーション開発 [ 手島 拓也 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;TypeScriptとReact&amp;#x2F;Next.jsでつくる実践Webアプリケーション開発 [ 手島 拓也 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=TypeScript%E3%81%A8React%2FNext.js%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B%E5%AE%9F%E8%B7%B5Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA%20%5B%20%E6%89%8B%E5%B3%B6%20%E6%8B%93%E4%B9%9F%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17149713&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、タイトルの通り、TypeScript + Next.jsという、&lt;br &#x2F;&gt;
モダン技術スタックでのアプリケーション開発をハンズオンで解説してくれる本です。&lt;&#x2F;p&gt;
&lt;p&gt;この技術スタックは、昨今では非常に良く使われているものかと思いますが、&lt;br &#x2F;&gt;
その割にこの技術スタックでのハンズオン解説の書籍は意外と少ないので、&lt;br &#x2F;&gt;
&lt;strong&gt;本書はそのジャンルの書籍として非常に有用だと思いました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、本のレベルとしてはやや中級向けで、&lt;br &#x2F;&gt;
実践的な反面、解説があっさりしていたりする部分もあるので、&lt;br &#x2F;&gt;
他の入門書とかでReactやTypeScriptの基本をおさえてから、&lt;br &#x2F;&gt;
この本を読むと、かなり実践的な理解が得られると思うのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Next.jsとTypeScriptというモダンフロントエンドの開発に興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;CSSやコンポネント設計などについてある程度知識がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;vue3hurontoendokai-fa-nojiao-ke-shu&quot;&gt;Vue3フロントエンド開発の教科書&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297130725_1_2.jpg&quot; alt=&quot;Vue 3　フロントエンド開発の教科書 [ WINGSプロジェクト　齊藤 新三 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Vue 3　フロントエンド開発の教科書 [ WINGSプロジェクト　齊藤 新三 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Vue%203%E3%80%80%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%20%5B%20WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%80%80%E9%BD%8A%E8%97%A4%20%E6%96%B0%E4%B8%89%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17244444&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、タイトルの通り、&lt;br &#x2F;&gt;
Vue3での開発に焦点をあてた本で、&lt;br &#x2F;&gt;
Vue3の書籍はまだまだ少ないので、&lt;br &#x2F;&gt;
非常に参考になりました。&lt;&#x2F;p&gt;
&lt;p&gt;そして、&lt;mark&gt;Vue3というやや応用的なトピックにもかかわらず、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;非常に解説がわかりやすかったのも印象的で、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;初心者でも無理なく読み進められる平易さだと思うので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そもそもVue.js自体が初心者という方にもおすすめできる書籍です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsは2系と3系、options apiとcomposition api(script setup lang=&quot;ts&quot;構成か否か)というように、&lt;br &#x2F;&gt;
書き方のパターンが多すぎて、幾分かカオスになっているのは否めないですが、&lt;br &#x2F;&gt;
この本は、今後主流になるであろう、vue3 composition api script setup lang=&quot;ts&quot;構成での&lt;br &#x2F;&gt;
解説になっているので、内容自体も実践的なので、&lt;br &#x2F;&gt;
非常におすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;実務でVue.jsを使う人は必読の一冊かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Vue3を学ぶがてらVue.jsの復習をしたい人&lt;&#x2F;li&gt;
&lt;li&gt;サクッとVue3を学びたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;またVue3については、&lt;br &#x2F;&gt;
私の方でも記事や動画をアップロードしているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;432&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wqL0_5Ewomo&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xin-ming-jie-c-ru-men&quot;&gt;新・明解C++入門&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784797394634.jpg&quot; alt=&quot;新・明解C++入門 [ 柴田 望洋 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;新・明解C++入門 [ 柴田 望洋 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E6%96%B0%E3%83%BB%E6%98%8E%E8%A7%A3C%2B%2B%E5%85%A5%E9%96%80%20%5B%20%E6%9F%B4%E7%94%B0%20%E6%9C%9B%E6%B4%8B%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15216193&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お、急にどうしたって感じの本と思われたかもしれませんが、&lt;br &#x2F;&gt;
いきなりのC++です。&lt;&#x2F;p&gt;
&lt;p&gt;C++は、プログラミング言語の中でも、&lt;br &#x2F;&gt;
Rustとかと同じぐらい高難易度で有名なので、&lt;br &#x2F;&gt;
学習コストが高いことで有名なのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;この本は、そんなC++についてかなりわかりやすく解説しており、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;非常に勉強になったのでおすすめします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;普段、Web系の言語ばかり使っていると、&lt;br &#x2F;&gt;
気付けない点とかをC++とか勉強していると、&lt;br &#x2F;&gt;
認識できるので、&lt;mark&gt;自分のインデックスを広げるために、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;定期的に普段馴染みがない言語とかを学ぶのも、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;良いアプローチだと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その際、もしC++を勉強するのであれば、&lt;br &#x2F;&gt;
この本はおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ポインター以降の章は、&lt;br &#x2F;&gt;
全体的に難易度が上がるので、&lt;br &#x2F;&gt;
必要に応じて読み飛ばすとかでもいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;たまにはちょっと堅い言語も学びたいWeb系エンジニアの人&lt;&#x2F;li&gt;
&lt;li&gt;普段同じような言語ばかりで刺激が欲しい人&lt;&#x2F;li&gt;
&lt;li&gt;ポインターとかを再学習したい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;sirikonbarepythonpurohuetusiyonaruda-quan&quot;&gt;シリコンバレーPythonプロフェッショナル大全&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;シリコンバレー一流プログラマーが教える　Pythonプロフェッショナル大全 [ 酒井　潤 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E3%80%80Python%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8%20%5B%20%E9%85%92%E4%BA%95%E3%80%80%E6%BD%A4%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17201602&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これは、Udemyでおなじみの酒井さんの書籍ですが、&lt;br &#x2F;&gt;
さすがUdemy講師だけあって、めちゃくちゃわかりやすい解説だなと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なPythonの文法はこの一冊で網羅できると思いますし、&lt;br &#x2F;&gt;
わかりやすいので、&lt;mark&gt;特に初心者におすすめしたい一冊だなと思いました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、良くも悪くもやや初心者向けなので、&lt;br &#x2F;&gt;
すでに実務でPythonをゴリゴリ使っているとか、&lt;br &#x2F;&gt;
Pythonの基礎文法は習得済みでもっと深いことを知りたいという方には、&lt;br &#x2F;&gt;
マッチしないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;これからPythonを学ぼうと考えている方のはじめの一冊として、&lt;br &#x2F;&gt;
ぜひともおすすめしたい本です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;これからPythonを学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;オライリーとかよりわかりやすい書籍がいい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;akitekutiya-si-xiang-zuo-fa-nouhauxi&quot;&gt;アーキテクチャ・思想・作法・ノウハウ系&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shi-jie-yi-liu-enzinianosi-kao-fa&quot;&gt;世界一流エンジニアの思考法&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;g0389565.jpg&quot; alt=&quot;世界一流エンジニアの思考法 ／ 文芸春秋&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;世界一流エンジニアの思考法 ／ 文芸春秋&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%80%9D%E8%80%83%E6%B3%95%20%EF%BC%8F%20%E6%96%87%E8%8A%B8%E6%98%A5%E7%A7%8B&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;shimamura-gakufu&amp;#x2F;g0389565&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、タイトルだけ見ると、&lt;br &#x2F;&gt;
「自分で世界一流ってどんだけ自信過剰なんだ」って感じましたが、&lt;br &#x2F;&gt;
違いました。&lt;&#x2F;p&gt;
&lt;p&gt;この著者の周りのエンジニアという切り口で、&lt;br &#x2F;&gt;
この著者自体は、終始謙った感じの文章で非常に好感が持てました。&lt;&#x2F;p&gt;
&lt;p&gt;それでいて、&lt;mark&gt;エンジニアに大切なことは&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;しっかり教えてくれているので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;なんというか、良い意味で期待を裏切られました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このような自己啓発系の本は、&lt;br &#x2F;&gt;
大半が外れですが、これは当たりです。&lt;&#x2F;p&gt;
&lt;p&gt;読んで損はしません。&lt;&#x2F;p&gt;
&lt;p&gt;特に日本的な開発に対する、&lt;br &#x2F;&gt;
著者の意見は個人的に同意できる部分がたくさんありました。&lt;&#x2F;p&gt;
&lt;p&gt;正直、私はここに書かれていることは、&lt;br &#x2F;&gt;
ある意味当たり前じゃんとも思いましたが、&lt;br &#x2F;&gt;
このあたり前のことを、例えばXとかで投稿すると、&lt;br &#x2F;&gt;
それは違うと、所謂日本的な価値観で否定してくる人が&lt;br &#x2F;&gt;
多かった経験があるので、&lt;br &#x2F;&gt;
私個人としては、この価値観を変えてくれる本として期待しています。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;日本のソフトウェア開発の体制に違和感を感じる人&lt;&#x2F;li&gt;
&lt;li&gt;一流エンジニアの思考を知りたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;purodakutomaneziyanosigoto&quot;&gt;プロダクトマネージャーのしごと&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784814400430_1_3.jpg&quot; alt=&quot;プロダクトマネージャーのしごと 第2版 1日目から使える実践ガイド [ Matt LeMay ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プロダクトマネージャーのしごと 第2版 1日目から使える実践ガイド [ Matt LeMay ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%AE%E3%81%97%E3%81%94%E3%81%A8%20%E7%AC%AC2%E7%89%88%201%E6%97%A5%E7%9B%AE%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20%5B%20Matt%20LeMay%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17581217&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、発売されたばっかりのときは、&lt;br &#x2F;&gt;
売り切れになって即入荷待ちになったりと、&lt;br &#x2F;&gt;
非常に人気が高い本だったのを覚えているのですが、&lt;br &#x2F;&gt;
タイトルの通り、プロダクトマネージャーについての実践的な心構えみたいなことが&lt;br &#x2F;&gt;
書かれています。&lt;&#x2F;p&gt;
&lt;p&gt;技術書というよりは、全体的にビジネス書寄りではありますが、&lt;br &#x2F;&gt;
&lt;mark&gt;プロダクトマネージャーに興味がある人にとっては、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ここまで詳細かつ実践的に書かれている本はあまりないと思うので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;必読の一冊かなと思いました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;技術志向が強めの方には、あまりマッチしないかもしれませんが、&lt;br &#x2F;&gt;
技術だけでなく、長期的にプロダクトマネージャーなども視野に見据えている方には、&lt;br &#x2F;&gt;
おすすめしたい本です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;プロダクトマネージャーに興味がある人全て&lt;&#x2F;li&gt;
&lt;li&gt;開発だけでないプロダクトの成長などに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;マネジメントのキャリアを目指している人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;enziniaringuzu-zhi-lun-henozhao-dai-bu-que-shi-xing-nixiang-kihe-usi-kao-tozu-zhi-norihuakutaringu&quot;&gt;エンジニアリング組織論への招待　不確実性に向き合う思考と組織のリファクタリング&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774196053.jpg&quot; alt=&quot;エンジニアリング組織論への招待 不確実性に向き合う思考と組織のリファクタリング [ 廣木大地 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;エンジニアリング組織論への招待 不確実性に向き合う思考と組織のリファクタリング [ 廣木大地 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E7%B5%84%E7%B9%94%E8%AB%96%E3%81%B8%E3%81%AE%E6%8B%9B%E5%BE%85%20%E4%B8%8D%E7%A2%BA%E5%AE%9F%E6%80%A7%E3%81%AB%E5%90%91%E3%81%8D%E5%90%88%E3%81%86%E6%80%9D%E8%80%83%E3%81%A8%E7%B5%84%E7%B9%94%E3%81%AE%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%20%5B%20%E5%BB%A3%E6%9C%A8%E5%A4%A7%E5%9C%B0%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15341337&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、エンジニアリングについて、&lt;br &#x2F;&gt;
しっかりと定義し、そこから考察を深めていくタッチの本で、&lt;br &#x2F;&gt;
ソフトウェア開発の不確実にどう向き合うかについて焦点を当てている本です。&lt;&#x2F;p&gt;
&lt;p&gt;哲学書とかみたいに、用語の定義を考えたりする人には、&lt;br &#x2F;&gt;
結構ハマるテイストだなと感じていて、&lt;br &#x2F;&gt;
「えそこから厳密に定義するの？」みたいな丁寧な記法になっていて、&lt;br &#x2F;&gt;
非常に論理的でした。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;それでいて、内容も組織のリファクタリングという身近な題材になっており、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;エンジニアであれば一度は読んでおきたい良書だと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;特に組織マネジメントや、マネジメントに興味がある現役エンジニアや、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;現役PMとかは必読といってもいいかもしれません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアリングに関係ない記述も多少ありましたが、&lt;br &#x2F;&gt;
それでも参考になります。&lt;&#x2F;p&gt;
&lt;p&gt;スクラム、アジャイルとウォーターフォールの違い、それぞれの状態、&lt;br &#x2F;&gt;
アジャイルは、開発手法ではなく、チームの状態、アジャイルへの&lt;br &#x2F;&gt;
誤解など、アジャイルの記述も多いのが特徴的でした。&lt;&#x2F;p&gt;
&lt;p&gt;最後の方では、マイクロサービスとモノリシックについても触れており、&lt;br &#x2F;&gt;
全体的に、ビジネス書感もありますが、しっかりエンジニアリングの本であることに変わりはなく、&lt;br &#x2F;&gt;
BizとDevの組織に思いをはせたいときに再読したいと私は思いました。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ソフトウェア開発が何なのか今一度考え直したい人&lt;&#x2F;li&gt;
&lt;li&gt;組織マネジメントと開発、ソフトウェアのあり方を考えたい人&lt;&#x2F;li&gt;
&lt;li&gt;全体的にエンジニアリングについてしっかり学びたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;aziyairusamurai-da-ren-kai-fa-zhe-henodao&quot;&gt;アジャイルサムライ　達人開発者への道&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784274068560.jpg&quot; alt=&quot;アジャイルサムライ 達人開発者への道 [ ジョナサン・ラスマセン ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;アジャイルサムライ 達人開発者への道 [ ジョナサン・ラスマセン ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4%20%E9%81%94%E4%BA%BA%E9%96%8B%E7%99%BA%E8%80%85%E3%81%B8%E3%81%AE%E9%81%93%20%5B%20%E3%82%B8%E3%83%A7%E3%83%8A%E3%82%B5%E3%83%B3%E3%83%BB%E3%83%A9%E3%82%B9%E3%83%9E%E3%82%BB%E3%83%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;11264116&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、その名の通り、&lt;br &#x2F;&gt;
アジャイル開発について詳細に解説している本です。&lt;&#x2F;p&gt;
&lt;p&gt;アジャイル開発は、立場や主張とかによって、&lt;br &#x2F;&gt;
微妙に意味が変わったりして、&lt;br &#x2F;&gt;
「結局アジャイルってなんだっけ？」ってなるのは、&lt;br &#x2F;&gt;
あるあるだと思うので、&lt;br &#x2F;&gt;
&lt;mark&gt;まずはこの本で、基本的なアジャイルのスタンダートを作ってから&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;他の類書を読んで、自分なりに「結局アジャイルってこういうことだよね」って&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;落とし所を見つける、とっかかりの本として非常におすすめです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;アジャイルサムライとあるぐらいなので、&lt;br &#x2F;&gt;
アジャイルだけかと思いきや、テスト駆動開発とか、&lt;br &#x2F;&gt;
ソフトウェアプロジェクト全般に通ずる、&lt;br &#x2F;&gt;
時間、予算、品質、スコープを荒ぶる四天王と定義していたりと、&lt;br &#x2F;&gt;
ソフトウェアプロジェクトの開発全般についての理解を深めたいときにも、&lt;br &#x2F;&gt;
ぜひとも読みたい一冊です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;アジャイルについて勉強したい人&lt;&#x2F;li&gt;
&lt;li&gt;ソフトウェア開発全般について知識を深めたい人&lt;&#x2F;li&gt;
&lt;li&gt;このようなソフトウェア開発の流儀のような本をまだ読んだことがない人全て&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;etusensiyarusukuramu&quot;&gt;エッセンシャルスクラム&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798130507.jpg&quot; alt=&quot;エッセンシャルスクラム アジャイル開発に関わるすべての人のための完全攻略ガ （Object　oriented　selection） [ ケネス・S．ラビン ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;エッセンシャルスクラム アジャイル開発に関わるすべての人のための完全攻略ガ （Object　oriented　selection） [ ケネス・S．ラビン ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%A8%E3%83%83%E3%82%BB%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%A9%E3%83%A0%20%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%AB%E9%96%A2%E3%82%8F%E3%82%8B%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%8C%E5%85%A8%E6%94%BB%E7%95%A5%E3%82%AC%20%EF%BC%88Object%E3%80%80oriented%E3%80%80selection%EF%BC%89%20%5B%20%E3%82%B1%E3%83%8D%E3%82%B9%E3%83%BBS%EF%BC%8E%E3%83%A9%E3%83%93%E3%83%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;12842933&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;シンプルに良書です。&lt;br &#x2F;&gt;
仕事でスクラム開発をしている人、&lt;br &#x2F;&gt;
スクラムを取り入れようと考えている人は、&lt;br &#x2F;&gt;
一度は目を通してみることをおすすめします。&lt;&#x2F;p&gt;
&lt;p&gt;スクラムは、アジャイル開発の手法の一つですが、&lt;br &#x2F;&gt;
意外とそれぞれの工程に目的や思想がはっきりしていて、&lt;br &#x2F;&gt;
しっかりインプットしていないと、その威力を活かしきれないのは&lt;br &#x2F;&gt;
あるあるですよね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;mark&gt;そうは言っても、結局スクラム開発ってどうしたらいいの？&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ってなると思いますが、その疑問に答えてくれるのが&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;本書という感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;結構分厚いかつ、字も小さいので、&lt;br &#x2F;&gt;
読了するのは大変ではありますが、&lt;br &#x2F;&gt;
スクラムの力をしっかり発揮させようとなると、&lt;br &#x2F;&gt;
本書は何度も読み返して実践していく価値があるように思えました。&lt;&#x2F;p&gt;
&lt;p&gt;まさに、エッセンシャルスクラムですね。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、そこまで初心者向けの本でもないかもしれませんが、&lt;br &#x2F;&gt;
個人的にはおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;スクラム開発に興味がある人、すでにスクラムを導入していてまだ本書を読んでいない全ての人&lt;&#x2F;li&gt;
&lt;li&gt;アジャイル開発に興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;組織マネジメントやチームの開発パフォーマンスなどに課題があると感じている人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;gitlabnixue-bushi-jie-zui-xian-duan-norimotozu-zhi-notukurikata&quot;&gt;GitLabに学ぶ世界最先端のリモート組織のつくりかた&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798179421_1_133.jpg&quot; alt=&quot;GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ [ 千田 和央 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ [ 千田 和央 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=GitLab%E3%81%AB%E5%AD%A6%E3%81%B6%20%E4%B8%96%E7%95%8C%E6%9C%80%E5%85%88%E7%AB%AF%E3%81%AE%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E7%B5%84%E7%B9%94%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%8B%E3%81%9F%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E6%B4%BB%E7%94%A8%E3%81%A7%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%81%AA%E3%81%97%E3%81%A7%E3%82%82%E6%9C%80%E5%A4%A7%E3%81%AE%E6%88%90%E6%9E%9C%E3%82%92%E5%87%BA%E3%81%99%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E4%BC%81%E6%A5%AD%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%20%5B%20%E5%8D%83%E7%94%B0%20%E5%92%8C%E5%A4%AE%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17569477&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;昨今は、リモートワークの流れから、&lt;br &#x2F;&gt;
オフィス回帰になってきたりと、&lt;br &#x2F;&gt;
何かとリモートワークへの風当たりが強くなってきましたが、&lt;br &#x2F;&gt;
&lt;mark&gt;この本は、そんな中リモートワークで生産性を高める組織について、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;詳しく解説しています。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この本については、私自身非常に感銘を受けた一冊なので、&lt;br &#x2F;&gt;
下記の記事や動画で詳細に解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2280&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;Pb6_wGbu6DE&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

私自身も、リモートワークの生産性自体については、&lt;br &#x2F;&gt;
色々思うことがあったので、&lt;br &#x2F;&gt;
上記の記事や動画で別途考察もしています。&lt;&#x2F;p&gt;
&lt;p&gt;フルリモートに肯定の人、&lt;br &#x2F;&gt;
否定の人、問わず読んでもらいたい本です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2024shi-jie-wobian-eru100noji-shu&quot;&gt;2024世界を変える100の技術&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000013670206.jpg&quot; alt=&quot;日経テクノロジー展望2024　世界を変える100の技術【電子書籍】&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;日経テクノロジー展望2024　世界を変える100の技術【電子書籍】&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E6%97%A5%E7%B5%8C%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%E5%B1%95%E6%9C%9B2024%E3%80%80%E4%B8%96%E7%95%8C%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B100%E3%81%AE%E6%8A%80%E8%A1%93%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;a2d62d3940ac3fd586978334d37fa120&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これは、正確にはビジネス書ではあるのですが、&lt;br &#x2F;&gt;
個人的に結構面白かったのでご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;普通のビジネスマン向けの書籍なので、&lt;br &#x2F;&gt;
日頃から様々な技術に触れているエンジニアからすると、&lt;br &#x2F;&gt;
「おん？、世界を変える技術？お前非エンジニアだろ？」みたいな&lt;br &#x2F;&gt;
抵抗感を感じる方もいるかもしれません（というか私がそうでした)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、エンジニアといっても、&lt;br &#x2F;&gt;
やはり自分の専門もあれば、&lt;br &#x2F;&gt;
良く知らない分野ももちろんあるわけで、&lt;br &#x2F;&gt;
&lt;strong&gt;特にこの本は、Web以外の先端技術にこういうものがあるんだっていうことを&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;知ることができたので、個人的には読んで良かったと思いました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Web系のエンジニアというと、技術って言うと、&lt;br &#x2F;&gt;
フレームワークだ、ライブラリだみたいな、&lt;br &#x2F;&gt;
Githubのコードを想像してしまうと思いますが、&lt;br &#x2F;&gt;
&lt;mark&gt;グリーンコンクリートみたいな、全く別分野の技術とかを&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;さらっと学べるので、エンジニアの最低限の嗜みとして&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;知っておきたい技術を拾えるので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;おすすめです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なまじ技術職をやっていると、&lt;br &#x2F;&gt;
逆に視野が狭くなってしまうこともあるかもしれないので、&lt;br &#x2F;&gt;
こういうビジネス書であえて世間的な技術をキャッチアップするのも、&lt;br &#x2F;&gt;
たまにはいいかもしれませんね。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;世間的に勢いがある技術を広く浅くキャッチアップしたい人&lt;&#x2F;li&gt;
&lt;li&gt;現役エンジニアこそ読んだほうがいいかもしれない&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;monorisukaramaikurosabisuhe&quot;&gt;モノリスからマイクロサービスへ&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119311.jpg&quot; alt=&quot;モノリスからマイクロサービスへ モノリスを進化させる実践移行ガイド [ Sam Newman ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;モノリスからマイクロサービスへ モノリスを進化させる実践移行ガイド [ Sam Newman ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%A2%E3%83%8E%E3%83%AA%E3%82%B9%E3%81%8B%E3%82%89%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%B8%20%E3%83%A2%E3%83%8E%E3%83%AA%E3%82%B9%E3%82%92%E9%80%B2%E5%8C%96%E3%81%95%E3%81%9B%E3%82%8B%E5%AE%9F%E8%B7%B5%E7%A7%BB%E8%A1%8C%E3%82%AC%E3%82%A4%E3%83%89%20%5B%20Sam%20Newman%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16516227&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、はっきり言って、&lt;br &#x2F;&gt;
結構難しいです。&lt;&#x2F;p&gt;
&lt;p&gt;マイクロサービスというトピック自体高度ということも、&lt;br &#x2F;&gt;
もちろんあるので、それが大きいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、内容自体は、非常に実践的で、&lt;br &#x2F;&gt;
&lt;mark&gt;そもそもマイクロサービスに本当にするべきなのかという、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;問題意識を掘り下げていて、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;何でもかんでもマイクロサービスにするデメリットなどについて、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;厳しく批評しており、こうしたアーキテクチャ選定などに、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;興味がある人にはとてもおすすめの本です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ある程度、マイクロサービスとは何かということや、&lt;br &#x2F;&gt;
マイクロサービスの問題点とかを軽く知っておいた方が、&lt;br &#x2F;&gt;
本書を読み進めやすいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;マイクロサービスに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;マイクロサービスには限界があると感じていて落とし所を模索している人&lt;&#x2F;li&gt;
&lt;li&gt;モノリスとマイクロサービスの違いが知りたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;aws-inhuraxi&quot;&gt;AWS・インフラ系&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;awsdehazimeruinhuragou-zhu-ru-men-an-quan-dejian-lao-naben-fan-huan-jing-nozuo-rifang&quot;&gt;AWSではじめるインフラ構築入門 安全で堅牢な本番環境の作り方&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798178004_1_112.jpg&quot; alt=&quot;AWSではじめるインフラ構築入門 第2版 安全で堅牢な本番環境のつくり方 [ 中垣 健志 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;AWSではじめるインフラ構築入門 第2版 安全で堅牢な本番環境のつくり方 [ 中垣 健志 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=AWS%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80%20%E7%AC%AC2%E7%89%88%20%E5%AE%89%E5%85%A8%E3%81%A7%E5%A0%85%E7%89%A2%E3%81%AA%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E6%96%B9%20%5B%20%E4%B8%AD%E5%9E%A3%20%E5%81%A5%E5%BF%97%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17353100&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、これからAWSを本格的に学びたい人、&lt;br &#x2F;&gt;
それも資格とかによる概念とかではなく、&lt;br &#x2F;&gt;
ハンズオンで実際にAWSをどのようにして使っていくのかについての、&lt;br &#x2F;&gt;
理解を深めたい人に特におすすめの本です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;AWSの本は、いくつか読みましたが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;個人的にはこの本が一番わかりやすいかつ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;網羅性もあり、しっかり実践的だったので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;非常に良書だと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;クラウドプラクティショナーのようなAWSの資格の勉強も&lt;br &#x2F;&gt;
良いのですが、それだけだと、「結局AWSってどうやって使うの？」って感じに&lt;br &#x2F;&gt;
なりがちかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、実務でAWSを使う必要が出てきた人とかに、&lt;br &#x2F;&gt;
特におすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;私ももし、今からAWSについて一から学習するとしたら、&lt;br &#x2F;&gt;
この本を選ぶと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;AWSをとにかく使えるようになりたい人&lt;&#x2F;li&gt;
&lt;li&gt;理論よりも先にハンズオンしてみたい人&lt;&#x2F;li&gt;
&lt;li&gt;AWSの資格取得は面倒だと感じる人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ji-chu-karaxue-busabaresukai-fa&quot;&gt;基礎から学ぶサーバーレス開発&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784863543140.jpg&quot; alt=&quot;基礎から学ぶ サーバーレス開発 [ 青池利昭 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;基礎から学ぶ サーバーレス開発 [ 青池利昭 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AC%E3%82%B9%E9%96%8B%E7%99%BA%20%5B%20%E9%9D%92%E6%B1%A0%E5%88%A9%E6%98%AD%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16302445&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、samやslsといったサーバーレスのフレームワークを使って、&lt;br &#x2F;&gt;
lambdaなどのプログラムを実行する方法などについて解説してくれています。&lt;&#x2F;p&gt;
&lt;p&gt;AWSを使って、ここまで色々できるのかということを知ることができるので、&lt;br &#x2F;&gt;
自分のインデックスを広げるという意味では良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;一方で全体的に解説があっさりしており、肝心の部分は公式ドキュメントを&lt;br &#x2F;&gt;
見て下さいという記述も多いため、ある程度プログラミング経験がある人向けかなと思いました。&lt;br &#x2F;&gt;
また、ソースコードの詳しい解説も少なく、内容も割といろんなAWSサービスを&lt;br &#x2F;&gt;
使うのでAWSについてもある程度知っている人向けの印象はありました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;サーバーレスの活用例(在宅勤務システムとか)や、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;請求の失敗談など、筆者の体験にもとづくエピソードもあり、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;より具体的な活用などを知ることができるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;サーバーレスを本格的に使用する方は、読んでおいた方が良いと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;サーバーレスに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;AWSやプログラミングの基本的な知識がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;kubernetes-on-awsapurikesiyonenziniaben-fan-huan-jing-hebei-eru&quot;&gt;Kubernetes on AWSアプリケーションエンジニア本番環境へ備える&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784865942354.jpg&quot; alt=&quot;Kubernetes　on　AWS ～アプリケーションエンジニア　本番環境へ備える [ 会澤 康二 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Kubernetes　on　AWS ～アプリケーションエンジニア　本番環境へ備える [ 会澤 康二 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Kubernetes%E3%80%80on%E3%80%80AWS%20%EF%BD%9E%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%80%80%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%B8%E5%82%99%E3%81%88%E3%82%8B%20%5B%20%E4%BC%9A%E6%BE%A4%20%E5%BA%B7%E4%BA%8C%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16235405&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、その名の通り、Kubernetesの本なのですが、&lt;br &#x2F;&gt;
副題にもあるようにインフラエンジニアというよりは、&lt;br &#x2F;&gt;
アプリケーションエンジニア目線で書かれているのが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;また、Kubernetesのハンズオンをしていく中で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;いろいろなAWSサービスを使っていくので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;シンプルにAWSの勉強にもなります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そもそもKubernetesが応用的なトピックということに加え、&lt;br &#x2F;&gt;
複数のAWSサービスを色々使うため、書籍の内容的には、&lt;br &#x2F;&gt;
あまり初心者向けではないかもしません。&lt;&#x2F;p&gt;
&lt;p&gt;また、監視やモニタリングといった、&lt;br &#x2F;&gt;
実務の本番環境のインフラを想定した応用的な内容も扱っているため、&lt;br &#x2F;&gt;
非常に実践的な反面、どうしても書籍のレベル感自体はそこそこ高いなという印象でした。&lt;br &#x2F;&gt;
(特にこれらについての実務経験がないとピンとこない箇所も多いかもしれません)&lt;&#x2F;p&gt;
&lt;p&gt;普段AWSをあまり使わない方や、&lt;br &#x2F;&gt;
Kubernetesに馴染みがない場合は、&lt;br &#x2F;&gt;
他の易しめの書籍をやってから本書をやったほうがより理解度が上がると思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ただ、apiサーバー、フロントエンド、バッチアプリケーションなど、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;アプリケーションエンジニアに身近なソフトウェアのデプロイ手法を学べるので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;個人的には良書だと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ハンズオン自体は、そこまで多くもなく、&lt;br &#x2F;&gt;
後半は解説がメインでしたが、&lt;br &#x2F;&gt;
Kubernetesは料金的にも気軽にハンズオン出来るものでもないので、&lt;br &#x2F;&gt;
これもある種ちょうどいい量かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;Kubernetesはある種、&lt;br &#x2F;&gt;
Dockerの応用のような側面もあったりするので、&lt;br &#x2F;&gt;
Dockerの基本的な使い方にまだ不安がある人は、&lt;br &#x2F;&gt;
そちらを先に勉強した方が理解度が上がるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerについては、&lt;br &#x2F;&gt;
私の方でも&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-network&#x2F;&quot;&gt;記事&lt;&#x2F;a&gt;や動画をアップロードしているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2186&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;QY6VVdlZxBQ&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetesに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;現役SREやインフラエンジニアの人、またはインフラに興味があるアプリケーションエンジニア&lt;&#x2F;li&gt;
&lt;li&gt;AWSの基本的な知識がある人&lt;&#x2F;li&gt;
&lt;li&gt;Dockerの基本的な知識がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nginxshi-jian-ru-men&quot;&gt;Nginx実践入門&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774178660.jpg&quot; alt=&quot;nginx実践入門 （WEB＋DB　press　plusシリーズ） [ 久保達彦 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;nginx実践入門 （WEB＋DB　press　plusシリーズ） [ 久保達彦 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%20%EF%BC%88WEB%EF%BC%8BDB%E3%80%80press%E3%80%80plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%89%20%5B%20%E4%B9%85%E4%BF%9D%E9%81%94%E5%BD%A6%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;13530382&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Nginxって、実務で使う可能性が非常に高い技術なのにもかかわらず、&lt;br &#x2F;&gt;
意外と技術書で探すと専門書が多くありません。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxは、個人的には公式ドキュメントが見やすいとは言い難いので、&lt;br &#x2F;&gt;
本書のように改めて体系的にNginxを学習できるツールは貴重だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;特に、Luaで設定をいじれるというのは、&lt;br &#x2F;&gt;
初耳でこの本で初めて知りました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;他にも基本的なNginxの使い方や、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;設定のパラメータなどについて詳しく解説しているので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Nginxを使う機会がある方は読んでおいても損はないかと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Nginxについては、&lt;br &#x2F;&gt;
私も&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nginx&#x2F;&quot;&gt;記事&lt;&#x2F;a&gt;や動画を作成しているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Nginxの設定に不安が残る人&lt;&#x2F;li&gt;
&lt;li&gt;実務などでNginxに触れる機会がある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2075&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;HFXXtWSHSGQ&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【フルリモート vs 出社】エンジニアの働き方の理想を考える</title>
        <published>2023-12-22T00:00:00+00:00</published>
        <updated>2023-12-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/remote_work/"/>
        <id>https://reisuta.com/remote_work/</id>
        
        <content type="html" xml:base="https://reisuta.com/remote_work/">&lt;p&gt;コロナ禍などで、&lt;br &#x2F;&gt;
世間的に一気にリモートワークが浸透しましたが、&lt;br &#x2F;&gt;
最近ではまた出社回帰の企業が増えてきました。&lt;&#x2F;p&gt;
&lt;p&gt;特に巨大テック企業のGoogleやZoomなどが&lt;br &#x2F;&gt;
出社回帰したことは大きく話題になりましたし、&lt;br &#x2F;&gt;
これらの企業の影響力は大きいので、&lt;br &#x2F;&gt;
リモートワークはオワコンとまことしやかに囁かれることも、&lt;br &#x2F;&gt;
増えてきました。&lt;&#x2F;p&gt;
&lt;p&gt;X(旧Twitter)やYouTubeとかはどうかというと、&lt;br &#x2F;&gt;
フルリモートというと、&lt;br &#x2F;&gt;
楽してるとか、絶対上手くいかないみたいな&lt;br &#x2F;&gt;
巨大テック企業の出社回帰の減少も相まってか、&lt;br &#x2F;&gt;
否定的な意見が多い印象です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1737603047394799644&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以上のことから、&lt;br &#x2F;&gt;
世間的にはリモートワーク(特にフルリモート)について、&lt;br &#x2F;&gt;
否定的に語られることが多いのですが、&lt;strong&gt;私はそうは思いません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;なぜなら、フルリモートには絶大なメリットがあるからです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;たしかにフルリモート特有のデメリットや、&lt;br &#x2F;&gt;
出社ならではのメリットもあります。&lt;br &#x2F;&gt;
実際、それらについては私もその通りだと思いますし、&lt;br &#x2F;&gt;
YouTubeとか Xの意見も、概ねこれらの考え方がメインなのかなと思っています、&lt;&#x2F;p&gt;
&lt;p&gt;ただ、それでもフルリモートのデメリットは、&lt;br &#x2F;&gt;
ある程度対策可能なのに対し、出社のデメリットは対策することが難しいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;そこで本記事では、フルリモートワークこそが&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;エンジニアの働き方として理想である理由や、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;出社やハイブリッドワークのデメリット、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;巨大テック企業が出社回帰したから、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;それに安易に迎合するのは避けるべきということについて&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;解説したいと思います&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;私自身、前職でフル出社とハイブリッドワークを経験し、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;現職ではフルリモートワークを経験しているため、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;概ね全ての働き方を経験してきているため、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;この題材については結構語れる要素があると思ったので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;本記事を作成しました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、下記の本はエンジニアの働き方を考えるうえで、&lt;br &#x2F;&gt;
とても参考になるので、フルリモートワークとハイブリッドワークどちらがいいのかという&lt;br &#x2F;&gt;
問題意識を持っている人は読んでみることをおすすめします。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798179421_1_133.jpg&quot; alt=&quot;GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ [ 千田 和央 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ [ 千田 和央 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=GitLab%E3%81%AB%E5%AD%A6%E3%81%B6%20%E4%B8%96%E7%95%8C%E6%9C%80%E5%85%88%E7%AB%AF%E3%81%AE%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E7%B5%84%E7%B9%94%E3%81%AE%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%8B%E3%81%9F%20%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AE%E6%B4%BB%E7%94%A8%E3%81%A7%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%81%AA%E3%81%97%E3%81%A7%E3%82%82%E6%9C%80%E5%A4%A7%E3%81%AE%E6%88%90%E6%9E%9C%E3%82%92%E5%87%BA%E3%81%99%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E4%BC%81%E6%A5%AD%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%20%5B%20%E5%8D%83%E7%94%B0%20%E5%92%8C%E5%A4%AE%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17569477&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;また、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;では、&lt;br &#x2F;&gt;
上記の本以外でも、&lt;br &#x2F;&gt;
プログラミング全般でおすすめの書籍を紹介しているので、&lt;br &#x2F;&gt;
興味がある方はぜひともご参考ください&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enzinianarahururimotogali-xiang&quot;&gt;エンジニアならフルリモートが理想&lt;&#x2F;h2&gt;
&lt;p&gt;若干、偏っていることは百も承知なのですが、&lt;br &#x2F;&gt;
個人的にはフルリモートにはメリットしかないと思います。&lt;br &#x2F;&gt;
(もちろんデメリットがないというわけではないのですが、&lt;br &#x2F;&gt;
それらのデメリットは対策可能という点で致命的ではないという意味で、&lt;br &#x2F;&gt;
メリットしかないという意味です)&lt;&#x2F;p&gt;
&lt;p&gt;パッと思いつくだけでもフルリモートには下記のメリットがあります&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;・働く場所を気にしなくていい&lt;br &#x2F;&gt;
・テキストコミュニュケーションが増えるので、やり方次第で情報を資産化できる&lt;br &#x2F;&gt;
・通勤時間を算出する必要がない&lt;br &#x2F;&gt;
・体調が微妙だったり、どうしても外せない用事とかがあった際の融通を、つけやすい&lt;br &#x2F;&gt;
・（フルフレックスなら働く時間も気にしなくていい。フルリモートの理想形はフルフレックスであるべきとも思います)&lt;&#x2F;p&gt;
&lt;p&gt;というか、わざわざ私が言うまでもなく、&lt;br &#x2F;&gt;
&lt;strong&gt;エンジニア目線であれば、一番働きやすいのって、&lt;br &#x2F;&gt;
フルリモートの圧勝だと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;フルリモートのデメリットは、主に経営層から&lt;br &#x2F;&gt;
語られることが多く、社員のパフォーマンスを懸念されることが多いです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hururimotonodemeritutohadui-ce-ke-neng&quot;&gt;フルリモートのデメリットは対策可能&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんなフルリモートの懸念点(デメリット)ですが、&lt;br &#x2F;&gt;
良く言われるのが、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;・サボる社員がいるのではないか&lt;br &#x2F;&gt;
・出社したほうが成果が出せる&lt;br &#x2F;&gt;
・フルリモートの人の労務管理が難しい&lt;&#x2F;p&gt;
&lt;p&gt;あたりですかね。&lt;br &#x2F;&gt;
実際巨大テック企業の出社回帰もこのあたりが&lt;br &#x2F;&gt;
理由だったかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;個人的にはフルリモートのデメリットは、&lt;br &#x2F;&gt;
これら以外にあると感じており、&lt;br &#x2F;&gt;
&lt;strong&gt;これらの社員のパフォーマンス懸念に関しては、&lt;br &#x2F;&gt;
言うほど、致命的な損失はないと思います。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(労務管理については、サイレント残業が発生したりする場合がないわけではないので、&lt;br &#x2F;&gt;
この３つの中では一番的を射たデメリットだとは思いますが)&lt;&#x2F;p&gt;
&lt;p&gt;Googleとか、Zoomとかは必ずしもエンジニアだけではなく、&lt;br &#x2F;&gt;
いろんな職種の人がいる、巨大企業なので、&lt;br &#x2F;&gt;
実際のところは、エンジニアの働き方が、&lt;br &#x2F;&gt;
フルリモートに向いていないからと言うより、&lt;br &#x2F;&gt;
全社員を出社にしたほうが手っ取り早いみたいな側面もあったような気もしています。&lt;br &#x2F;&gt;
(あとは、エンジニアだけリモートにするのは不公平だからという理由もあった気がします)&lt;&#x2F;p&gt;
&lt;p&gt;つまり、エンジニア単体で考えると、&lt;br &#x2F;&gt;
これらのデメリットってほとんど意味をなさないなと感じています。&lt;&#x2F;p&gt;
&lt;p&gt;以下順番に解説します&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hururimotohasaborunoka&quot;&gt;フルリモートはサボるのか？&lt;&#x2F;h3&gt;
&lt;p&gt;よくある疑問として、フルリモートだとだらけるのではないかというのがあります。&lt;br &#x2F;&gt;
だらけるのが心配だからフル出社にした方がいいという主張もたまに見かけます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これについては、&lt;br &#x2F;&gt;
私からすると、自分からマネジメント能力がないと言っているようにしか聞こえません。&lt;&#x2F;p&gt;
&lt;p&gt;確かにフルリモートというのは、基本的に個人の自主性に任せるので、その気になればサボることは可能です。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、そもそも論として、&lt;strong&gt;このサボるサボらないということ自体、馬鹿馬鹿しい議題です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;平たくいうと成果主義。&lt;br &#x2F;&gt;
すなわち、その人がどれだけのアウトプットをしたかで判断し、途中経過は任せればいいのです。&lt;&#x2F;p&gt;
&lt;p&gt;ぶっちゃけ、成果を適切にアウトプットしていれば、サボっていようが何しようがどうでもいいのです。&lt;br &#x2F;&gt;
&lt;strong&gt;つまり時給でその人の労働を、図るという発想のままだと、フルリモートは実現できないでしょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;サボるという思想自体も、その労働時間に対して仕事していない時間があると考えるから生まれるわけです。&lt;br &#x2F;&gt;
それであれば、そもそも労働時間に対して仕事をしているという発想を改めるべきです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、これは職種によっては馴染まないので、&lt;br &#x2F;&gt;
エンジニアの場合の話です。&lt;&#x2F;p&gt;
&lt;p&gt;裏を返せば、成果を出せないのであれば、&lt;br &#x2F;&gt;
アウトプットを出せるまで、仕事をしなければならない時もあります。&lt;br &#x2F;&gt;
なので、労働時間ではなく、その人の成果で判断すれば、フルリモートを実現するのは難しくないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;つまりフルリモートで、いわゆるサボりを行ったところで、最後に苦しむのは結局自分なので、必然的にサボらなくなります。&lt;&#x2F;p&gt;
&lt;p&gt;それどころか、場合によっては出社しているときよりも、いわゆるサイレント残業が発生しがちな気もします。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;osskai-fa-hahururimoto&quot;&gt;OSS開発はフルリモート&lt;&#x2F;h4&gt;
&lt;p&gt;皆さんは、エンジニアのチームとして最高峰を考えると何を思い起こすでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、GAFAとかもありますが、&lt;br &#x2F;&gt;
もっと身近でかつ高レベルなものとして、&lt;br &#x2F;&gt;
OSS開発があります。&lt;&#x2F;p&gt;
&lt;p&gt;これも多くの場合、フルリモートですよね。&lt;br &#x2F;&gt;
そして、最高のプロダクトが作り出されています。&lt;&#x2F;p&gt;
&lt;p&gt;それに加えて、OSSとかだと、時差が異なることもあるので、基本mtgとかもないでしょう。&lt;br &#x2F;&gt;
完全にテキストチャットで行う非同期分散開発の究極系です。&lt;&#x2F;p&gt;
&lt;p&gt;個人的にはこれこそあるべき姿なのかなと思っています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chu-she-sitahougacheng-guo-gachu-seru&quot;&gt;出社したほうが成果が出せる&lt;&#x2F;h3&gt;
&lt;p&gt;もう一つよく聞くのが、&lt;br &#x2F;&gt;
出社したほうがパフォーマンスが高いというのがあります。&lt;&#x2F;p&gt;
&lt;p&gt;これについては、正直企業の業態とか&lt;br &#x2F;&gt;
組織構造によるなと思っていて、&lt;br &#x2F;&gt;
&lt;strong&gt;一概に全ての企業がそう断定できないとは思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;というのも、基本的に出社したほうが効率が良い企業は、&lt;br &#x2F;&gt;
mtgやディスカッションが比較的多かったり、&lt;br &#x2F;&gt;
顧客とのコミュニケーションの重要性が相対的に高いパターンに&lt;br &#x2F;&gt;
当てはまると思っていて、裏を返せば、&lt;br &#x2F;&gt;
これらの特徴が弱ければ、&lt;br &#x2F;&gt;
正直出社してようがリモートだろうが、&lt;br &#x2F;&gt;
そんなに変わらないと私は考えます。&lt;&#x2F;p&gt;
&lt;p&gt;しばしば、Googleとかの素晴らしい製品は、&lt;br &#x2F;&gt;
同じ部屋で話し合って生まれたみたいなエピソードを聞くと、&lt;br &#x2F;&gt;
出社こそ最高というふうに感じるかもしれませんが、&lt;br &#x2F;&gt;
フルリモートで生み出されたOSSとかにも素晴らしい製品はいくらでもあるので、&lt;br &#x2F;&gt;
出社だからこそ、最高の製品を作り出せて、リモートだと作り出せないなんていうことは&lt;br &#x2F;&gt;
全くないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、結局のところ、出社の方が成果を出せるというのは、&lt;br &#x2F;&gt;
&lt;strong&gt;そういうケースもあるかもしれないけど、&lt;br &#x2F;&gt;
どこまで確証があるのかはわからないふわっとしているものと&lt;br &#x2F;&gt;
言わざるをえない気がします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;haiburitudowakugali-xiang-toiunohaxu&quot;&gt;ハイブリッドワークが理想というのは嘘&lt;&#x2F;h3&gt;
&lt;p&gt;このようにフルリモートがいいと言うと、&lt;br &#x2F;&gt;
それなら、出社とフルリモートを合わせたハイブリッドこそ理想という意見も聞きます&lt;&#x2F;p&gt;
&lt;p&gt;これについては、組織によって何が正解かはもちろん異なりますし、&lt;br &#x2F;&gt;
ハイブリッドワークはフルリモートのデメリットをある種適切に解決している側面はあるので、&lt;br &#x2F;&gt;
悪いアプローチとは私も思いません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、私個人の意見としては、&lt;br &#x2F;&gt;
&lt;strong&gt;ハイブリッドワークよりも、フルリモートの方がいいと考えます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;理由はシンプルで、&lt;br &#x2F;&gt;
例えば週二回の出社日を、&lt;br &#x2F;&gt;
リモートにしてしまったりした際に、&lt;br &#x2F;&gt;
注意を受けやすかったり、&lt;br &#x2F;&gt;
ひどい場合にはフル出社にすると切り替えたり、&lt;br &#x2F;&gt;
&lt;strong&gt;基本的に出社の方がいいという風潮に陥りやすく、&lt;br &#x2F;&gt;
結果的にリモートワークの人の立場が弱くなるからです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、営業職などのように、&lt;br &#x2F;&gt;
はっきりとこの日は出社しないとそもそも仕事にならないみたいな職種の場合はこの限りではありませんが、&lt;br &#x2F;&gt;
少なくともエンジニアのように、出社するしないで、仕事の生産性が0か100かになるような世界線でない職種で、&lt;br &#x2F;&gt;
きっちり出社したかどうかを管理するのは、はっきり言って馬鹿馬鹿しいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;remote_work&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ni-nichu-she-surumeritutowokao-eru&quot;&gt;逆に出社するメリットを考える&lt;&#x2F;h3&gt;
&lt;p&gt;さてフルリモート賛美が続いたので、&lt;br &#x2F;&gt;
少し出社のメリットも考えています。&lt;&#x2F;p&gt;
&lt;p&gt;まず挙げられるのが、&lt;br &#x2F;&gt;
信頼関係を構築しやすいという点です。&lt;br &#x2F;&gt;
これは確かに一理あるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、信頼関係を構築しやすいということは、&lt;br &#x2F;&gt;
壊しやすいというのもあります。&lt;br &#x2F;&gt;
出社は、リモートに比べ良くも悪くもコミュニュケーションが密になるので、&lt;br &#x2F;&gt;
適切にコミュニュケーションが取れれば効果的に信頼関係を構築できる一方、やり方を間違えると、&lt;br &#x2F;&gt;
逆に信頼をそこなってしまうこともあります。&lt;&#x2F;p&gt;
&lt;p&gt;これはあくまで個人的な考えではありますが、&lt;br &#x2F;&gt;
そもそも職場の信頼関係を築くことは、&lt;br &#x2F;&gt;
高いパフォーマンスの仕事をすることに必須なのかという疑問があります。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、信頼関係を構築できれば、&lt;br &#x2F;&gt;
それだけ風通しもよくなり、&lt;br &#x2F;&gt;
心理的安全性は高まりますから、&lt;br &#x2F;&gt;
個人が自分の能力を発揮しやすくなります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、信頼関係を構築しないと発揮できないかというとそんなことは決してないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;信頼関係構築の背後には、&lt;br &#x2F;&gt;
仕事を楽しくして、人生を充実させたいのような、本来の仕事のパフォーマンスとは別の側面も含まれている気がしており、&lt;br &#x2F;&gt;
信頼関係を構築したからといって、エンジニアなどは基本的に実力やスキルがモノをいうので、&lt;br &#x2F;&gt;
パフォーマンスが低い人は低いままであることがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、これは、本来パフォーマンスが高いはずなのに、&lt;br &#x2F;&gt;
コミュニュケーションの齟齬によって発揮できていない際に問題になることですが、&lt;br &#x2F;&gt;
そのレベルのコミュニュケーションであれば、&lt;br &#x2F;&gt;
フルリモートで十分達成できます。&lt;&#x2F;p&gt;
&lt;p&gt;あと、出社のメリットとして語られがちな、&lt;br &#x2F;&gt;
すぐにわからないことを聞けるという点ですが、&lt;br &#x2F;&gt;
個人的にはこれは結構現場によって変わるよなという印象でして、&lt;br &#x2F;&gt;
少なくとも私の場合では、このメリットは全くなかったと言っても良かったです。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、結局出社していて、隣に先輩エンジニアがいても、&lt;br &#x2F;&gt;
mtgばっかりだったり、死ぬほど忙しそうで話しかけられる雰囲気じゃなかったりで、&lt;br &#x2F;&gt;
結局chatで聞いた方が早いということがしばしばあったからです。&lt;&#x2F;p&gt;
&lt;p&gt;それと、めちゃくちゃあるあるなのが、&lt;br &#x2F;&gt;
新人は出社させられるけど、先輩はリモートだから、&lt;br &#x2F;&gt;
結局コミュニケーションはchatになるっていう、&lt;br &#x2F;&gt;
意味不明なシチュエーションもあります。&lt;&#x2F;p&gt;
&lt;p&gt;結局のところ、出社の方が良いというのではなくて、&lt;br &#x2F;&gt;
単にその人が出社のほうがあっているというケースがほとんどで、&lt;br &#x2F;&gt;
働き方としては、出社じゃないとだめということは&lt;br &#x2F;&gt;
基本ないのかなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hururimotoniokeruguan-xi-gou-zhu-todemeritutonituite&quot;&gt;フルリモートにおける関係構築とデメリットについて&lt;&#x2F;h2&gt;
&lt;p&gt;冒頭でフルリモートこそ最高みたいな論調で語ってしまいましたが、&lt;br &#x2F;&gt;
正直、フルリモートにデメリットがないわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;世間的には、フルリモートはサボるから良くないとか、&lt;br &#x2F;&gt;
楽してるみたいな、パフォーマンス面を懸念するデメリットが多いですが、&lt;br &#x2F;&gt;
個人的にはフルリモートのデメリットはそこではないと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hururimotohabing-miyasui&quot;&gt;フルリモートは病みやすい&lt;&#x2F;h3&gt;
&lt;p&gt;フルリモートの最大のデメリット。&lt;br &#x2F;&gt;
それは病みやすいということです。&lt;&#x2F;p&gt;
&lt;p&gt;これって意外と語られることが少ないのですが、&lt;br &#x2F;&gt;
正直フルリモートのデメリットはこれ以外には存在しないと、&lt;br &#x2F;&gt;
私は思っています。&lt;&#x2F;p&gt;
&lt;p&gt;フルリモートは、基本的に家で一人でずっと仕事をするので、&lt;br &#x2F;&gt;
何もしないと、家に引きこもりがちになりますし、&lt;br &#x2F;&gt;
職場とのコミュニケーションも、オンラインmtgしかないので、&lt;br &#x2F;&gt;
どうしても希薄になります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、人との交流が極度になくなってしまい、&lt;br &#x2F;&gt;
精神を病みやすくなります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、本来フルリモートの対策としては、&lt;br &#x2F;&gt;
この点に焦点を当てるべきなのですが、&lt;br &#x2F;&gt;
これを解決しようとしている組織は、&lt;br &#x2F;&gt;
まだそこまで多くない印象です。&lt;br &#x2F;&gt;
(冒頭で紹介したGitlabとかはこの点についても&lt;br &#x2F;&gt;
触れていたと思います。)&lt;&#x2F;p&gt;

&lt;a class=&quot;afl-text&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098184&amp;amp;p_id=170&amp;amp;pc_id=185&amp;amp;pl_id=4062&amp;amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0CBR9GYF6&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;GitLabに学ぶ 世界最先端のリモート組織のつくりかた ドキュメントの活用でオフィスなしでも最大の成果を出すグローバル企業のしくみ&lt;&#x2F;a&gt;
&lt;p&gt;ただ、これについても&lt;br &#x2F;&gt;
対策は可能だと思っていて、&lt;br &#x2F;&gt;
私としては下記のような対策が有効だと思います&lt;br &#x2F;&gt;
(この対策としてハイブリッドワークを取り入れるのは、&lt;br &#x2F;&gt;
悪手とは言えないが、微妙に目的が変わってしまっている気がするので、&lt;br &#x2F;&gt;
個人的には推奨できない)&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;・まず、今後同じチームで仕事をするであろうメンバーの初回顔合わせを行う&lt;br &#x2F;&gt;
・いつでも飲みとかに誘えるような心理的安全性を作る&lt;&#x2F;p&gt;
&lt;p&gt;このあたりかなと思います。&lt;br &#x2F;&gt;
よくある、定期的に会う機会を設けるというのも、&lt;br &#x2F;&gt;
悪くはないと思いますが、&lt;br &#x2F;&gt;
会うのを目的にすると言うよりかは、&lt;br &#x2F;&gt;
会いたくなったから会うということのほうが理想だと思うので、&lt;br &#x2F;&gt;
いつでも気軽に誘える心理的安全性を築くっていうことが大事だと私は考えます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;timesnoshi-ifang&quot;&gt;timesの使い方&lt;&#x2F;h4&gt;
&lt;p&gt;フルリモートの場合、&lt;br &#x2F;&gt;
timesも意外と重要だったりします。&lt;&#x2F;p&gt;
&lt;p&gt;timesは平たく言うと、&lt;br &#x2F;&gt;
chatツールにおける、&lt;br &#x2F;&gt;
自分のTwitterのようなもので、&lt;br &#x2F;&gt;
好きなことを呟ける部屋です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、このtimesで、&lt;br &#x2F;&gt;
趣味の話とか好きなものとかを語っていると、&lt;br &#x2F;&gt;
そのtimesを観た人で興味がある人と盛り上がったり出来るので、&lt;br &#x2F;&gt;
フルリモート組織ならtimesの導入はメリットが大きいなという印象です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ju-da-tetukuqi-ye-nochu-she-hui-gui-nituite&quot;&gt;巨大テック企業の出社回帰について&lt;&#x2F;h2&gt;
&lt;p&gt;さて、そうは言っても、&lt;br &#x2F;&gt;
Googleとか、リモートワークの代名詞のZoomが&lt;br &#x2F;&gt;
フルリモートをやめた時点で正解はわかりきっているんじゃないって感じる人も&lt;br &#x2F;&gt;
多いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;私からすると、GoogleやZoomの組織構造やビジネス構造と、&lt;br &#x2F;&gt;
他の多くの企業が一緒なわけはないので、&lt;br &#x2F;&gt;
Googleとかが出社回帰したからそれに迎合するというのは、&lt;br &#x2F;&gt;
あまりに軽率すぎないかとも感じますが、&lt;br &#x2F;&gt;
確かにこれらの企業の影響力があるのは間違いありません。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、これらの企業の出社回帰についても&lt;br &#x2F;&gt;
考察してみます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;googlenochang-he&quot;&gt;Googleの場合&lt;&#x2F;h3&gt;
&lt;p&gt;まずGoogleです。&lt;&#x2F;p&gt;
&lt;p&gt;下記の記事を見ると、&lt;br &#x2F;&gt;
週３日の出社と、出社したかどうかの&lt;br &#x2F;&gt;
チェックも行っているとのことで、&lt;br &#x2F;&gt;
かなり厳しめの出社回帰だなと感じました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.businessinsider.jp&#x2F;post-272779&quot;&gt;https:&#x2F;&#x2F;www.businessinsider.jp&#x2F;post-272779&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;同じ部屋で一緒に働くことがポジティブな変化ということが語られているように、&lt;br &#x2F;&gt;
出社することによるパフォーマンスを重視しての、&lt;br &#x2F;&gt;
決断なのかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私個人の意見としては、&lt;br &#x2F;&gt;
OSSとかもあるので、出社しないと、&lt;br &#x2F;&gt;
ポジティブな変化が表れないとは全然思えないのですが、&lt;br &#x2F;&gt;
Googleとかになると、規模や影響力なども、&lt;br &#x2F;&gt;
普通の企業と大きく異なるので、世界1位を走るために、&lt;br &#x2F;&gt;
微細なパフォーマンス向上でも見込めるならそうするべきだみたいな&lt;br &#x2F;&gt;
考えもあるのかもしれませんし、それなら別に特段不思議な意思決定とも感じません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、注意したいのは、&lt;br &#x2F;&gt;
これはあくまでGoogleレベルの話だからそう言えるのであって、&lt;br &#x2F;&gt;
他の多くの企業がGoogleと同じレベルなのかというと、&lt;br &#x2F;&gt;
絶対そんなことはないのかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;求めているものや背景、状況も全く違うので、&lt;br &#x2F;&gt;
Googleがリモートワークをやめたから、&lt;br &#x2F;&gt;
うちもリモートワークをやめるというのは&lt;br &#x2F;&gt;
思考停止なのではと思ってしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;Googleの場合、&lt;br &#x2F;&gt;
そもそもGAFAとして苛烈な競争にさらされ、&lt;br &#x2F;&gt;
トップに君臨し続ける重圧があるため、&lt;br &#x2F;&gt;
パフォーマンス向上にこだわるのはめちゃくちゃわかります。&lt;br &#x2F;&gt;
そして、Googleのような巨大テック企業であれば、&lt;br &#x2F;&gt;
週３日出社という強気な施策に出ても、&lt;br &#x2F;&gt;
エンジニア採用に困ることはほぼないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;こういう背景があるから、Googleは出社にしているだけなのかなと&lt;br &#x2F;&gt;
私は考えます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、正直私からすると、&lt;br &#x2F;&gt;
Googleのほうが特殊ケースで、&lt;br &#x2F;&gt;
他の多くの企業は、やはりフルリモートのほうが&lt;br &#x2F;&gt;
適しているのではないかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;特に日本の多くの企業では、&lt;br &#x2F;&gt;
エンジニア採用を不利にしてまで、&lt;br &#x2F;&gt;
出社回帰をするメリットがあるのか疑問です。&lt;&#x2F;p&gt;
&lt;p&gt;世界一位を維持するとかならたしかに&lt;br &#x2F;&gt;
出社にして、最高パフォーマンスを追求するというのはわかりますが、&lt;br &#x2F;&gt;
正直そのレベルではないなら、フルリモートで、&lt;br &#x2F;&gt;
全然パフォーマンスは出せると思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zoomnochang-he&quot;&gt;Zoomの場合&lt;&#x2F;h3&gt;
&lt;p&gt;お次はZoomです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、下記の記事を見ると、&lt;br &#x2F;&gt;
週二回出社を要請しているっぽいですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nikkei.com&#x2F;article&#x2F;DGXZQOUC153QZ0V11C23A1000000&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.nikkei.com&#x2F;article&#x2F;DGXZQOUC153QZ0V11C23A1000000&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;「リモートワークの代名詞のZoomが出社回帰。リモートオワコン」みたいな&lt;br &#x2F;&gt;
ことがよく語られがちですが、&lt;br &#x2F;&gt;
個人的には、これもGoogleのときと同じく、&lt;br &#x2F;&gt;
思考停止の一種かなと思っています。&lt;&#x2F;p&gt;
&lt;p&gt;私としては、ZoomもGoogleのときと同じく、&lt;br &#x2F;&gt;
特殊ケースでしかないと思っていて、&lt;br &#x2F;&gt;
別に特段の驚きはありません。&lt;&#x2F;p&gt;
&lt;p&gt;その理由はシンプルで、&lt;br &#x2F;&gt;
Zoomがリモートワークを推進する商売をしているから、&lt;br &#x2F;&gt;
メインクライアントである、出社をしている顧客の立場とか、&lt;br &#x2F;&gt;
出社からリモートに切り替えたいと考えている顧客の立場や課題を知るために、&lt;br &#x2F;&gt;
自分たちもある程度は出社をしないとわからないからです。&lt;&#x2F;p&gt;
&lt;p&gt;これは確かにその通りだなと感じており、&lt;br &#x2F;&gt;
リモートを推進する会社だからこそ、&lt;br &#x2F;&gt;
リモート以外を知る必要があるというのは、&lt;br &#x2F;&gt;
全然不思議ではありません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Zoomのようにリモートワークの推進を商売にしている会社って、&lt;br &#x2F;&gt;
どれだけあるのかっていうことを考えると、&lt;br &#x2F;&gt;
これも特殊ケースだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;特殊ケースをみて、&lt;br &#x2F;&gt;
リモートワークがオワコンと考えるのは、&lt;br &#x2F;&gt;
早計なのかなと感じます。&lt;&#x2F;p&gt;
&lt;p&gt;実際、Zoomってたしかに出社しているときにも使うことあるので、&lt;br &#x2F;&gt;
そういうニーズを捉えるために、出社したほうがいいという判断は、&lt;br &#x2F;&gt;
何ら不思議はないと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-lun-hururimotovs-chu-she&quot;&gt;結論:フルリモートvs 出社&lt;&#x2F;h2&gt;
&lt;p&gt;議論がやや錯綜したので、&lt;br &#x2F;&gt;
最後に結論だけ言って、&lt;br &#x2F;&gt;
締めます。&lt;&#x2F;p&gt;
&lt;p&gt;この記事で私が最も伝えたかったのは、&lt;br &#x2F;&gt;
フルリモートへの誤解と、巨大テック企業への迎合への違和感です。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;br &#x2F;&gt;
&lt;strong&gt;フルリモートが適しているかどうかは組織によって異なるし、&lt;br &#x2F;&gt;
少なくともエンジニアにおいては、フルリモートでパフォーマンスを出せないこともないし、&lt;br &#x2F;&gt;
巨大テック企業の特殊ケースを除けば、むしろフルリモートのほうがメリットが大きいことが&lt;br &#x2F;&gt;
ほとんど。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ということが言いたかったのですが、&lt;br &#x2F;&gt;
うまくまとまりませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;正直、フルリモートを実現するためには、&lt;br &#x2F;&gt;
どうしてもメンバーの能力とかも関係してくるので、&lt;br &#x2F;&gt;
すべての企業がフルリモートが適しているとは私は思いません。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、フルリモートという選択肢を最初から薙ぎ払ってしまうのはナンセンスだなとは&lt;br &#x2F;&gt;
思っており、基本的に巨大テック企業のような例外を除き、&lt;br &#x2F;&gt;
フルリモートを目指したほうがメンバーの能力、パフォーマンス双方ともに、&lt;br &#x2F;&gt;
レベルが上がることがほとんどで、そもそもフルリモートって、&lt;br &#x2F;&gt;
能力が高い人が多くないと成り立たないので、&lt;br &#x2F;&gt;
組織の理想形として目指したい像ではあります。&lt;&#x2F;p&gt;
&lt;p&gt;それを最初から薙ぎ払ってしまうのは、&lt;br &#x2F;&gt;
自分から「私はマネジメント能力がありません」って言っているような&lt;br &#x2F;&gt;
ものになりかねないので(フルリモートでも上手く回るけどあえて出社にしているとかなら、&lt;br &#x2F;&gt;
良い選択だと思います)、個人的にはフルリモートこそが、&lt;br &#x2F;&gt;
手っ取り早く組織のレベルを上げる働き方として優れているということを&lt;br &#x2F;&gt;
本記事でお伝えしたかったです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【絶対に就職してはいけないブラック企業】駆け出しWeb系エンジニアへの罠</title>
        <published>2023-12-16T00:00:00+00:00</published>
        <updated>2023-12-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/black-companies/"/>
        <id>https://reisuta.com/black-companies/</id>
        
        <content type="html" xml:base="https://reisuta.com/black-companies/">&lt;p&gt;以前、X(旧ツイッタ)の方で、&lt;br &#x2F;&gt;
下記のような投稿を行いました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1727275525973168298&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;想像以上に反響があったので、&lt;br &#x2F;&gt;
本記事では、このツイートの詳細に&lt;br &#x2F;&gt;
触れていこうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、記事のジャンルとしては、&lt;br &#x2F;&gt;
エッセイ・体験談のような形になります。&lt;&#x2F;p&gt;
&lt;p&gt;下記のような人向けの記事です。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;これからエンジニアを目指している人&lt;&#x2F;p&gt;
&lt;p&gt;エンジニア就職する上で絶対に就職してはいけない企業がどういうものか知りたい人&lt;&#x2F;p&gt;
&lt;p&gt;優良企業がどういう特徴か知りたい人&lt;&#x2F;p&gt;
&lt;p&gt;おすすめの転職エージェントや転職サービスを知りたい人&lt;&#x2F;p&gt;
&lt;p&gt;世にも奇妙なブラック企業の怪談を聞きたい人&lt;&#x2F;p&gt;
&lt;p&gt;下記のような人には参考にならないか、&lt;br &#x2F;&gt;
趣向がマッチしません&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;技術的な記事を求めている人(他の記事で上げているのでそちらをどうぞ)&lt;&#x2F;p&gt;
&lt;p&gt;まあ基本は、&lt;br &#x2F;&gt;
「世の中にはこんなやばい企業があるんだぜ」っていう&lt;br &#x2F;&gt;
ちょっとした雑談チックな記事なので軽い気持ちで読んでください。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、それだけだとあまりに読者のみなさんへの&lt;br &#x2F;&gt;
メリットがなさすぎるので、&lt;br &#x2F;&gt;
一応本記事を読むメリットとして、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ブラック企業への解像度があがる&lt;&#x2F;p&gt;
&lt;p&gt;エンジニア就職の温度感がわかる&lt;&#x2F;p&gt;
&lt;p&gt;優良企業に就職するために何をすればいいのかわかる&lt;&#x2F;p&gt;
&lt;p&gt;などはご提供出来ると思います。&lt;br &#x2F;&gt;
ぜひともご参考ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tou-gao-sitaqi-ye-nituite&quot;&gt;投稿した企業について&lt;&#x2F;h2&gt;
&lt;p&gt;まずは、ツイートした企業の情報について改めて整理します。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;3ヶ月ぐらいお試しで採用する&lt;&#x2F;p&gt;
&lt;p&gt;3ヶ月後に本採用する保証はしない&lt;&#x2F;p&gt;
&lt;p&gt;本採用の保証はしないが、基本うちに来ること前提的な口調&lt;&#x2F;p&gt;
&lt;p&gt;お試し採用期間中は&lt;strong&gt;無給&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もちろん毎日出社&lt;&#x2F;p&gt;
&lt;p&gt;モダンな開発案件でゴリゴリ経験積める(らしい)&lt;&#x2F;p&gt;
&lt;p&gt;まず、このあたりが基本情報です。&lt;&#x2F;p&gt;
&lt;p&gt;いや基本情報ですでにお腹いっぱいって感じですね...&lt;&#x2F;p&gt;
&lt;p&gt;特に、&lt;strong&gt;無給のインパクトがものすごいですよね。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
これ作り話とかじゃなくて、本当にそう言われたんです...(どうか作り話であってくれ)&lt;&#x2F;p&gt;
&lt;p&gt;この企業は、わたしが未経験でエンジニア就活しているときに、&lt;br &#x2F;&gt;
カジュアル面談したのですが、&lt;br &#x2F;&gt;
こんな感じの条件だったので、&lt;br &#x2F;&gt;
わたしはお断りしました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、このツイートが思いの外反響もあり、&lt;br &#x2F;&gt;
実際にここでインターンとして働いていた経験がある方にも、&lt;br &#x2F;&gt;
少しお話を伺いました。&lt;&#x2F;p&gt;
&lt;p&gt;その追加情報をリストアップすると、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;無給インターン生は多い時で8人ぐらいいたことも&lt;&#x2F;p&gt;
&lt;p&gt;納期とかはめちゃくちゃ詰められる&lt;&#x2F;p&gt;
&lt;p&gt;上層部は開発を軽んじている思想でエンジニアを大事にしない&lt;&#x2F;p&gt;
&lt;p&gt;優秀なエンジニアもいるらしいが上の精神的なパワハラなどで疲弊している&lt;&#x2F;p&gt;
&lt;p&gt;実は、これ以外にもかなりのびっくり情報があったのですが、&lt;br &#x2F;&gt;
これ以上言うと、特定されかねないので伏せます。&lt;br &#x2F;&gt;
平たく言うと、典型的なワンマン社長の企業で、&lt;br &#x2F;&gt;
社員を奴隷のようにぐらいにしか思っていないんだろうなというのが、&lt;br &#x2F;&gt;
めちゃくちゃわかりやすいところです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に無給で分かる通り、お金にかなりケチなことは伺えました。&lt;br &#x2F;&gt;
(無給はケチとかっていうレベルを通り越していますが...)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;konoqi-ye-demomu-ji-gaatutali-you&quot;&gt;この企業でも募集があった理由&lt;&#x2F;h3&gt;
&lt;p&gt;これだけ聞くと、&lt;br &#x2F;&gt;
「いや誰も応募しねえだろ」って思うかもしれませんが、&lt;br &#x2F;&gt;
多いときで8人ぐらいのインターンがいたっていうぐらいなので、&lt;br &#x2F;&gt;
結構人気な企業と言えなくもありません(この会社の規模を考えると)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そう、この会社のやり方が汚いなと強く感じさせる特徴が&lt;br &#x2F;&gt;
「実務経験を積める」という特徴です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;みな、これを求めて無給でも応募していたんだと思います。&lt;br &#x2F;&gt;
実際、この企業は、開発の実務経験自体は、&lt;br &#x2F;&gt;
割と本当に積めるみたいなので、&lt;br &#x2F;&gt;
開発の実務経験を積むという目的にフォーカスするなら、&lt;br &#x2F;&gt;
応募する人がいても不思議ではありません。&lt;&#x2F;p&gt;
&lt;p&gt;実際に働いている人に聞いた感じも、&lt;br &#x2F;&gt;
この点は嘘ではなかったようです。&lt;br &#x2F;&gt;
(それもNext.jsのような人気のモダン技術で)&lt;&#x2F;p&gt;
&lt;p&gt;しかし、私個人としては、&lt;br &#x2F;&gt;
ある意味、未経験エンジニアの「実務経験がない」という弱みにつけ込んで、&lt;br &#x2F;&gt;
人件費を抑えようとしている、非常に狡猾かつ残忍なやり方なので、&lt;br &#x2F;&gt;
たとえ開発経験を積むことだけを考えても、&lt;br &#x2F;&gt;
絶対に応募しては行けない企業だと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;ここの企業はWeb系Sierに該当しますが、&lt;br &#x2F;&gt;
ここを受けるぐらいなら、研修もしっかりやってくれて、&lt;br &#x2F;&gt;
もちろん、給料も出してくれるSESとかに行ったほうが、&lt;br &#x2F;&gt;
10000倍良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ともすると、Web系とか、&lt;br &#x2F;&gt;
自社サービスみたいな言葉は、&lt;br &#x2F;&gt;
キラキラしていて、それが一人歩きしているような気がしていますが、&lt;br &#x2F;&gt;
そこしか見ていないと、こういう残忍企業に引っかかってしまうかもしれませんので、&lt;br &#x2F;&gt;
注意してください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enziniajiu-huo-nonan-yi-du-hashang-gatuteiru&quot;&gt;エンジニア就活の難易度は上がっている&lt;&#x2F;h2&gt;
&lt;p&gt;正直、私が未経験だったときと比べて、&lt;br &#x2F;&gt;
現在は未経験エンジニアの就活の難易度が上がっているのではという印象を受けます。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ポートフォリアはあるのは当たり前&lt;&#x2F;p&gt;
&lt;p&gt;未経験でもプログラミング全く触ったことないレベルの人は殆ど見かけない&lt;&#x2F;p&gt;
&lt;p&gt;だからこそ、上記のような企業には注意が必要です。&lt;br &#x2F;&gt;
上記の企業は、現在も普通に転職媒体とかで、&lt;br &#x2F;&gt;
「未経験でも可」という謳い文句で募集しているので、&lt;br &#x2F;&gt;
&lt;strong&gt;現在のような就活難易度が上がっている中だと、&lt;br &#x2F;&gt;
以前よりも危険度が上がっている気がします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私自身、未経験のときは&lt;br &#x2F;&gt;
実務経験を積むということをめちゃくちゃ考えていたので、&lt;br &#x2F;&gt;
気持ちはめちゃくちゃわかります。&lt;&#x2F;p&gt;
&lt;p&gt;「プログラミングスクールは金かかるし、&lt;br &#x2F;&gt;
たとえ無給でも、Reactとかの経験が積めるならいい」&lt;&#x2F;p&gt;
&lt;p&gt;そう考えて、安易に応募するのはおすすめしません。&lt;br &#x2F;&gt;
上記の企業とかは、無給という体質で分かるように、&lt;br &#x2F;&gt;
基本的にかなりのモラハラ・パワハラ気質だそうです&lt;br &#x2F;&gt;
(実際に同企業で働かれていた方にお聞きしました)&lt;&#x2F;p&gt;
&lt;p&gt;最悪の場合、メンタルを壊したり、&lt;br &#x2F;&gt;
体調を壊してしまう可能性も否定できません。&lt;br &#x2F;&gt;
(基本的に無給だったら生活が苦しくなるのは当たり前なのですが、&lt;br &#x2F;&gt;
この企業はそういうことを一ミリも配慮してくれないどころか、&lt;br &#x2F;&gt;
かなりの労働を求めてくるようです...)&lt;&#x2F;p&gt;
&lt;p&gt;そうなってしまうと、&lt;br &#x2F;&gt;
なんのために実務経験を積んだのかも分からなくなります。&lt;&#x2F;p&gt;
&lt;p&gt;それに、無給という場合だと、&lt;br &#x2F;&gt;
そもそもお金をもらっていないので、&lt;br &#x2F;&gt;
実務経験と呼べるかも怪しいという問題もあります。&lt;&#x2F;p&gt;
&lt;p&gt;「Web系の実務経験が、未経験でも積める」という甘い誘いに&lt;br &#x2F;&gt;
乗らないよう注意してください。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;imaenzinianinarunaradousitaraiika&quot;&gt;いまエンジニアになるならどうしたらいいか&lt;&#x2F;h3&gt;
&lt;p&gt;さて、それを踏まえ、&lt;br &#x2F;&gt;
今からエンジニアになるにはどうすればいいのかというと、&lt;br &#x2F;&gt;
一言でいうと、優良企業に就職することです。&lt;&#x2F;p&gt;
&lt;p&gt;「いやそんなの当たり前じゃねえか」&lt;br &#x2F;&gt;
って怒り狂わないでください。&lt;&#x2F;p&gt;
&lt;p&gt;ここでの優良企業っていうのは、&lt;br &#x2F;&gt;
Yahooとかリクルートみたいな就職難易度が高い、&lt;br &#x2F;&gt;
誰もが知っている優良企業という意味ではないです。&lt;&#x2F;p&gt;
&lt;p&gt;それは、未経験の人でも入りやすく、かつ、&lt;br &#x2F;&gt;
未経験の人が入るからこそメリットが大きい企業全般のことです。&lt;&#x2F;p&gt;
&lt;p&gt;正直、未経験の人が入りやすい企業は多くありません。&lt;br &#x2F;&gt;
その中で比較的条件が良い企業を優良企業と私は考えて、&lt;br &#x2F;&gt;
そこに就職するのが最も良いということです(結局当たり前の結論に戻ってきました)&lt;&#x2F;p&gt;
&lt;p&gt;こういう企業に入るためにどういうことをしたらいいのかについては、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;programming-school&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;でも解説しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;you-liang-qi-ye-notiao-jian&quot;&gt;優良企業の条件&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんな優良企業の具体的な条件ですが、&lt;br &#x2F;&gt;
個人的には、下記のような企業かと思います。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;面接官や社員の雰囲気に違和感を感じない&lt;&#x2F;p&gt;
&lt;p&gt;オープンワークのスコアが3.0を下回っていない&lt;&#x2F;p&gt;
&lt;p&gt;未経験の人がOKな理由がはっきりしている&lt;&#x2F;p&gt;
&lt;p&gt;大量採用をしていない&lt;&#x2F;p&gt;
&lt;p&gt;常に募集していない&lt;&#x2F;p&gt;
&lt;p&gt;という感じです。&lt;&#x2F;p&gt;
&lt;p&gt;これらに加えて、こういう企業にありがちな特徴としては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Web系Sier スタートアップ　ベンチャー　中小&lt;&#x2F;p&gt;
&lt;p&gt;自社サービス スタートアップ ベンチャー　中小&lt;&#x2F;p&gt;
&lt;p&gt;元請けSier&lt;&#x2F;p&gt;
&lt;p&gt;このような属性の企業が多い気はしています。&lt;br &#x2F;&gt;
&lt;strong&gt;ただ、SESとかでもホワイトなところであれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;上記の条件は普通にクリアしているはずなので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そういうSESなら全然ありです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;逆にWeb系Sierとかでも、&lt;br &#x2F;&gt;
上記の条件をクリアしていないとちょっと警戒したほうが良いです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、すでに言いました、&lt;br &#x2F;&gt;
ツイートのやばい企業は、&lt;br &#x2F;&gt;
Web系Sierなので、属性だけ見ると、&lt;br &#x2F;&gt;
良さげに見えます(それがまた、たちが悪い)&lt;&#x2F;p&gt;
&lt;p&gt;未経験の人は、どういうわけか、&lt;br &#x2F;&gt;
自社サービスとかWeb系に行きたがるような印象がありますが、&lt;br &#x2F;&gt;
&lt;strong&gt;それ以外にも優良企業はたくさんあるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;幅広く探したほうが良いのかなと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記に加えて、mustではないけど、&lt;br &#x2F;&gt;
満たしていると更に高評価の条件は、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;技術力が高いエンジニアがいる&lt;&#x2F;p&gt;
&lt;p&gt;コードレビュー文化がある(あ、これは割とmustかも...)&lt;&#x2F;p&gt;
&lt;p&gt;資格を評価してくれる(自社サービスとかは評価されないことがほとんどなので一概には言えない)&lt;&#x2F;p&gt;
&lt;p&gt;いろんな業務を任せてくれる(裁量権が大きい的な？)&lt;&#x2F;p&gt;
&lt;p&gt;私服OKとかリモートワーク可(これとその企業が柔軟な思考かってある程度比例する印象があるので、業種によってはできない場合もあるので、これも一概には言えない。少なくとも業種的にも業務的にもリモートワークとか私服OKのはずなのに、古くからの慣習で頑なに認めないような企業は風通しが悪いので避けたほうが無難かと思います)&lt;&#x2F;p&gt;
&lt;p&gt;という感じですかね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;buratukuqi-ye-note-zheng&quot;&gt;ブラック企業の特徴&lt;&#x2F;h3&gt;
&lt;p&gt;これに対して、未経験の人が遭遇しやすい&lt;br &#x2F;&gt;
ブラック企業はどういう属性かと言うと、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;開発ができますで釣るが、入社したら違う業務をやらされる&lt;&#x2F;p&gt;
&lt;p&gt;ツイートの記事の無給のような、法律違反を平気でする企業&lt;&#x2F;p&gt;
&lt;p&gt;残業がやたらと多い(月40時間を超える頻度が多すぎるなど)&lt;&#x2F;p&gt;
&lt;p&gt;パワハラ・モラハラ体質の社員が多い&lt;&#x2F;p&gt;
&lt;p&gt;敬語文化がない&lt;&#x2F;p&gt;
&lt;p&gt;社長が非エンジニアだったりと、エンジニアへの理解がない(これだけだと必ずしもブラックではないが、これに加えて社長が横柄とかだと、ブラック企業になりやすい印象)&lt;&#x2F;p&gt;
&lt;p&gt;基本的に社員のことを考えていない。採用リスクを負わない (例 未経験は無給で雇う。未経験は資格を２つ取ってからじゃないと採用しない。案件がないと給料を払わないなど。SESとかに多い印象です...)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;まあ、面接とかで違和感を感じたら、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そこには行かないほうが良いと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;特にSESとかは、ブラック企業が比較的多いので、&lt;br &#x2F;&gt;
SESを受けるときはちょっと警戒するぐらいがちょうどいいかもしれません。&lt;br &#x2F;&gt;
(ホワイトSESもあるので、SES自体が悪いということではありません)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;osusumenozhuan-zhi-ezientoyazhuan-zhi-sabisu&quot;&gt;おすすめの転職エージェントや転職サービス&lt;&#x2F;h2&gt;
&lt;p&gt;さて、ここまで優良企業、ブラック企業の特徴を解説しましたが、&lt;br &#x2F;&gt;
結局どうやってそういう企業を探せばいいの？ってなると思うので、&lt;br &#x2F;&gt;
おすすめの転職エージェントやサービスをいくつかご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、転職エージェントと提携しているっていうことは、&lt;br &#x2F;&gt;
その企業はそこにコストを掛けられるっていうことでしょうから、&lt;br &#x2F;&gt;
所謂、超零細ブラックみたいな企業は、転職エージェントを使うだけでも&lt;br &#x2F;&gt;
避けられるかもしれません(絶対の保証はもちろんないのですが...)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rebatetukukiyaria&quot;&gt;レバテックキャリア&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4189611&amp;amp;p_id=969&amp;amp;pc_id=1263&amp;amp;pl_id=13852&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000013852.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;まずは、有名どころのレバテックキャリアです。&lt;br &#x2F;&gt;
私も実際に利用したことがあるので、&lt;br &#x2F;&gt;
分かるのですが、ここはどちらかと言うと、&lt;br &#x2F;&gt;
そこそこ経験がある人向けなのかなという印象です。&lt;&#x2F;p&gt;
&lt;p&gt;実務1年ぐらいでも、紹介はしてくれると思いますが、&lt;br &#x2F;&gt;
それだと、必ずしも良い案件を紹介してくれるか微妙な気がしたので、&lt;br &#x2F;&gt;
実務3年ぐらいある人向けのエージェントかなという印象です。&lt;&#x2F;p&gt;
&lt;p&gt;また、担当者によっては、高圧的な人もいて、&lt;br &#x2F;&gt;
苦手という評判も聞きましたが、&lt;br &#x2F;&gt;
私が使ったときは全然そんなことなく、&lt;br &#x2F;&gt;
他のエージェントに比べても、&lt;br &#x2F;&gt;
多めにフィードバックをしてくれて&lt;br &#x2F;&gt;
結構参考になりました。&lt;&#x2F;p&gt;
&lt;p&gt;履歴書や職務経歴書の添削はもちろん、&lt;br &#x2F;&gt;
志望度が高い企業の面接は別途、&lt;br &#x2F;&gt;
前日とかに、こういう質問にはこのように答えておいたほうが良いとか、&lt;br &#x2F;&gt;
こういう人はお見送りになりやすいみたいな、&lt;br &#x2F;&gt;
細かいポイントも教えてくれたので、&lt;br &#x2F;&gt;
個人的には結構良かったなと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;複数使うエージェントの一つに組み入れても良いのではないでしょうか。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kuraudorinku&quot;&gt;クラウドリンク&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4304118&amp;amp;p_id=4112&amp;amp;pc_id=10408&amp;amp;pl_id=56389&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000056389.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;次はクラウドリンクです。&lt;br &#x2F;&gt;
レバテックキャリアに比べると、&lt;br &#x2F;&gt;
やや知名度は劣るかもしれませんが、&lt;br &#x2F;&gt;
こちらもおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは特に自社開発系の企業に進みたい人に&lt;br &#x2F;&gt;
マッチするかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;自社開発系の求人が多くある印象です。&lt;br &#x2F;&gt;
一方で、未経験や微経験だと、&lt;br &#x2F;&gt;
場合によっては求人を紹介してもらえないこともあるようなので、&lt;br &#x2F;&gt;
経験者向けのエージェントといえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;自社開発系の企業に転職したい現役エンジニアの方にはおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;一方で、自社開発に興味がない人には、&lt;br &#x2F;&gt;
求人のほとんどが自社内開発系になるので、&lt;br &#x2F;&gt;
他のエージェントを使用したほうが無難かと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tech-stars-agent&quot;&gt;Tech Stars Agent&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4189599&amp;amp;p_id=1874&amp;amp;pc_id=3658&amp;amp;pl_id=71566&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000071566.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;エージェントと言うと、&lt;br &#x2F;&gt;
広く浅くいろんな業界に強いみたいなタイプもありますが、&lt;br &#x2F;&gt;
もちろん特化型もありまして、&lt;br &#x2F;&gt;
こちらは、エンジニア特化型なので、&lt;br &#x2F;&gt;
エンジニア転職しか興味ない人には、&lt;br &#x2F;&gt;
強くおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;それも、より上のエンジニアを目指したい人にマッチするエージェントになるかと思うので、&lt;br &#x2F;&gt;
技術志向が強い人にはマッチするかもしれません&lt;&#x2F;p&gt;
&lt;p&gt;エンジニア転職についての専門的な知識を有し、&lt;br &#x2F;&gt;
特化型ということもあり、より上のエンジニアを目指したい、&lt;br &#x2F;&gt;
現役エンジニアの方には強くおすすめできます。&lt;br &#x2F;&gt;
特にコンサルタントは、業界経験者や、&lt;br &#x2F;&gt;
エンジニアの実務経験がある人だったりするので、&lt;br &#x2F;&gt;
他のエージェントに比べ、圧倒的に話が通じやすいというのは&lt;br &#x2F;&gt;
大きなメリットです。エンジニア特有の悩みとかも相談できると思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、ゲーム業界などにも強みがあるので、&lt;br &#x2F;&gt;
そこらへんへの転職を狙っている人にもうってつけかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;パッと聞いた感じ、&lt;br &#x2F;&gt;
未経験お断りのような感じもしますが、&lt;br &#x2F;&gt;
実際に使用したユーザーの評判とかを見ると、&lt;br &#x2F;&gt;
未経験の人も結構利用しているようなので、&lt;br &#x2F;&gt;
エンジニア転職を目指している人であれば、&lt;br &#x2F;&gt;
情報収集がてら利用してみるのもいいのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;大手のエージェントに比べると、&lt;br &#x2F;&gt;
やや求人数は劣るかもしれませんので、&lt;br &#x2F;&gt;
レバテックキャリアなどと並行して使用するのがベストかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;uzuz-uzuuzu&quot;&gt;UZUZ（ウズウズ)&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4304114&amp;amp;p_id=5389&amp;amp;pc_id=14733&amp;amp;pl_id=70490&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000070490.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;比較的経験者向けのエージェントが続きましたが、&lt;br &#x2F;&gt;
こちらのUZUZは、20代ならOKという、&lt;br &#x2F;&gt;
未経験やポテンシャル枠向けのエージェントです。&lt;&#x2F;p&gt;
&lt;p&gt;現在フリーターとかの方でも、&lt;br &#x2F;&gt;
エージェントがほしいという方に強くおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;特に未経験の就活は、苦戦しやすいので、&lt;br &#x2F;&gt;
このようなエージェントを利用するだけで、&lt;br &#x2F;&gt;
かなり情報量の意味でも有利になると思うので、&lt;br &#x2F;&gt;
おすすめです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kitukakeeziento&quot;&gt;キッカケエージェント&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;px.a8.net&amp;#x2F;svt&amp;#x2F;ejp?a8mat=3THCME+6FLN3M+591K+609HT&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;bgt.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;こちらは、キャリア系インフルエンサーのモローさんで有名な&lt;br &#x2F;&gt;
エージェントです。&lt;&#x2F;p&gt;
&lt;p&gt;実際に私も利用したことがあるのですが、&lt;br &#x2F;&gt;
ここは、他のエージェントとはちょっと特殊で、&lt;br &#x2F;&gt;
少数の企業にアタックしていくような感じでした。&lt;&#x2F;p&gt;
&lt;p&gt;なので、よくある、とりあえずたくさんいろんな企業に応募していくというスタイルではありません。&lt;br &#x2F;&gt;
いろんな企業に応募してしまうと、鬼のようにお見送りになったり、&lt;br &#x2F;&gt;
自分が行きたい企業とかがぼやけてしまいがちなので、&lt;br &#x2F;&gt;
的確な戦略だなと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;また、こちらで紹介してもらった企業は、&lt;br &#x2F;&gt;
基本的にBizの視点が要求されるなという印象で、&lt;br &#x2F;&gt;
ただ技術力を伸ばしたいと言うよりも、&lt;br &#x2F;&gt;
プロダクト開発の視点とかも養っていきたいような人に、&lt;br &#x2F;&gt;
相性が良いエージェントだなと感じました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;akusisukonsaruteingu&quot;&gt;アクシスコンサルティング&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4278816&amp;amp;p_id=2502&amp;amp;pc_id=5511&amp;amp;pl_id=32429&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000032429.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;アクシスコンサルティングは、ハイクラス向けのエージェントで、&lt;br &#x2F;&gt;
コンサルとかを目指している方向けのエージェントです。&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアから、外資コンサルとかを見据えているような、&lt;br &#x2F;&gt;
ハイクラス向けのエージェントとしておすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;特にアクシスコンサルティングは、&lt;br &#x2F;&gt;
未経験からコンサルを目指したい人にもおすすめできる&lt;br &#x2F;&gt;
エージェントで、キャリアアドバイザーも話しやすいという評判を&lt;br &#x2F;&gt;
しばしば聞きますので、異業種からコンサルを目指したい人にはうってつけかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;一方で、コンサルの面接で重要である、&lt;br &#x2F;&gt;
フェルミ推定とかの対策は、場合によっては、&lt;br &#x2F;&gt;
十分に行ってもらえない（というかやらなくても大丈夫と判断される)こともあるようなので、&lt;br &#x2F;&gt;
これらの対策に不安がある場合は、別途申し出ると良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアからコンサルに転職すると、&lt;br &#x2F;&gt;
大幅に年収が上がることも少ないと思うので、&lt;br &#x2F;&gt;
コンサルへの転職を見据えている方は、一度&lt;br &#x2F;&gt;
話を聞いてみるだけでも良いかもしれません。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Dockerネットワーク入門】DNSサーバーによるコンテナ名通信の仕組み</title>
        <published>2023-11-27T00:00:00+00:00</published>
        <updated>2023-11-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/docker-network/"/>
        <id>https://reisuta.com/docker-network/</id>
        
        <content type="html" xml:base="https://reisuta.com/docker-network/">&lt;p&gt;本記事では、&lt;br &#x2F;&gt;
Dockerのネットワークについて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerのネットワークは、&lt;br &#x2F;&gt;
やや高度な話題なので、&lt;br &#x2F;&gt;
正直基礎と言えるか微妙ではありましたが、&lt;br &#x2F;&gt;
実務に入ると高確率で使うことが多いので、&lt;br &#x2F;&gt;
取り上げます。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerの基礎については、&lt;br &#x2F;&gt;
ある程度知っていることを前提に解説しますので、&lt;br &#x2F;&gt;
Dockerの基礎が不安な方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;などもご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockernetutowakunozhong-lei&quot;&gt;Dockerネットワークの種類&lt;&#x2F;h2&gt;
&lt;p&gt;Dockerネットワークはコンテナ間の通信を管理し、&lt;br &#x2F;&gt;
異なる環境や要件に応じて柔軟な設定を可能にします。&lt;&#x2F;p&gt;
&lt;p&gt;以下では、主要なネットワークタイプの概要とその利用例、メリットとデメリットを説明します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-network-ls&quot;&gt;docker network ls&lt;&#x2F;h3&gt;
&lt;p&gt;現在利用可能なDockerネットワークの一覧を表示するには、docker network lsコマンドを使用します。&lt;br &#x2F;&gt;
これにより、&lt;strong&gt;bridge、host、noneなどのデフォルトネットワークと、カスタムで作成されたネットワークが表示されます&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker network ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;bridgenetutowaku&quot;&gt;bridgeネットワーク&lt;&#x2F;h3&gt;
&lt;p&gt;Dockerのデフォルトネットワークタイプです。&lt;br &#x2F;&gt;
異なるコンテナが同じbridgeネットワークに属している場合、&lt;br &#x2F;&gt;
互いに通信できます。&lt;&#x2F;p&gt;
&lt;p&gt;メリットは、シンプルで理解しやすいことで、&lt;br &#x2F;&gt;
後で詳しく触れますが、&lt;br &#x2F;&gt;
&lt;mark&gt;コンテナ名での通信など、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;異なるコンテナ間の分離を保ちつつ通信を許可してくれます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;デメリットは、パフォーマンスの観点から、&lt;br &#x2F;&gt;
大規模なアプリケーションには適していない場合があるという感じでしょうか。&lt;br &#x2F;&gt;
NATの処理が重くなってしまったり、多数のコンテナが同じbridgeネットワークを共有する場合は、&lt;br &#x2F;&gt;
ネットワーク帯域幅が飽和する可能性があるので、&lt;br &#x2F;&gt;
大規模アプリケーションとかだとこの点がネックになることはありえるかもしれないですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ネットワーク帯域幅は、一定時間内にネットワークを介して送受信できるデータの量を指します。&lt;br &#x2F;&gt;
通常はMbps（メガビット毎秒）やGbps（ギガビット毎秒）で測定されるやつですね。&lt;br &#x2F;&gt;
よく光回線の速度とかで計測している、あれです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fast.com&#x2F;ja&#x2F;#&quot;&gt;https:&#x2F;&#x2F;fast.com&#x2F;ja&#x2F;#&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;brigeネットワークが、&lt;br &#x2F;&gt;
パフォーマンスに影響が出ていないかを&lt;br &#x2F;&gt;
ピンポイントで特定するのは、&lt;br &#x2F;&gt;
高度なトピックだと思うので、&lt;br &#x2F;&gt;
詳細には触れませんが、こういうときに使えるものとして、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker stats&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コマンドなどがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;stats.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;stats.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、MacOS自体のネットワークを監視したいときは、&lt;br &#x2F;&gt;
nettopなども使えるかもしれません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nettop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、上記のようなパフォーマンス上の懸念がないとはいえ、&lt;br &#x2F;&gt;
デフォルトのネットワークであり、&lt;br &#x2F;&gt;
おそらく一番使用頻度は多いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なんかdocker重いなっていうときに、&lt;br &#x2F;&gt;
上記のbridgeネットワークの特徴を思い出して、&lt;br &#x2F;&gt;
チューニングするのが良いかなと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hostnetutowaku&quot;&gt;hostネットワーク&lt;&#x2F;h3&gt;
&lt;p&gt;Dockerのhostネットワークモードでは、コンテナがホストマシンのネットワークスタックを直接使用します。&lt;br &#x2F;&gt;
これにより、コンテナはホストと同じIPアドレスとポートを共有し、ネットワークのオーバーヘッドを回避することができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx --network host nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドにより、nginxコンテナはホストマシンと同じネットワークスタックを使用します。&lt;br &#x2F;&gt;
これにより、&lt;mark&gt;ホストマシン上で利用可能なポートはコンテナから直接アクセス可能になります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;bridgeネットワークでは、コンテナはホストから分離されたネットワークスタックを持ち、&lt;br &#x2F;&gt;
NATを通じて外部ネットワークと通信します。一方、hostネットワークでは、この分離がありません。&lt;&#x2F;p&gt;
&lt;p&gt;またNATによる処理がないため、&lt;br &#x2F;&gt;
hostネットワークはbridgeネットワークよりも高いパフォーマンスを提供できることが多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、デメリットとしては、コンテナとホストのネットワーク分離がないため、&lt;br &#x2F;&gt;
悪意のあるコンテナがホストシステムに影響を与えるリスクが高まることや、&lt;br &#x2F;&gt;
ホストのポートを直接使用するため、ポートの競合が発生しがちということでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;hostネットワークだと、docker psとかを使ったときに、&lt;br &#x2F;&gt;
PORTSが空になっていることがほとんどだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まあ正直、そんなに頻繁に使うたぐいのものではない気もします。&lt;br &#x2F;&gt;
ホストマシンのポートをそのまま使えるっていうのは、&lt;br &#x2F;&gt;
dockerの仮想化のメリットが薄まってしまう気もするなと&lt;br &#x2F;&gt;
個人的には感じるので。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-network&#x2F;graphic-design-studio-g0ff77deef_1920-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nonenetutowaku&quot;&gt;noneネットワーク&lt;&#x2F;h3&gt;
&lt;p&gt;このネットワークは、コンテナにネットワーキング機能を提供しません。&lt;br &#x2F;&gt;
こうなると、それはネットワークなのかというツッコミはさておき、&lt;br &#x2F;&gt;
ネットワークから分離されるのでセキュリティが向上するのがメリットです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;デメリットとしては非常にわかりやすいですが、&lt;br &#x2F;&gt;
他のコンテナやサービスと通信できなくなります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Dockerのnoneネットワークは、コンテナにネットワークインターフェースを割り当てず、&lt;br &#x2F;&gt;
ネットワークの分離を最大限に行う設定なので、&lt;br &#x2F;&gt;
コンテナが外部ネットワークや他のコンテナと通信することを完全に防ぎます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;strong&gt;noneネットワークの指定と、&lt;br &#x2F;&gt;
ネットワーク設定を何もしない場合とは異なります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ネットワーク設定を何も指定しない場合、Dockerはデフォルトでbridgeネットワークを使用します。&lt;br &#x2F;&gt;
これは、Dockerが提供する標準的なネットワークで、コンテナ間の通信を可能にし、&lt;br &#x2F;&gt;
ホストマシンとの間にも仮想ネットワークブリッジを作成します。&lt;br &#x2F;&gt;
したがって、ネットワーク設定を何もしない場合、コンテナは外部ネットワークや他のコンテナと通信できる状態になります。&lt;&#x2F;p&gt;
&lt;p&gt;対照的に、noneネットワークを明示的に指定すると、コンテナはネットワークから完全に切り離されます。&lt;br &#x2F;&gt;
この設定は、コンテナが外部と通信する必要がない、&lt;br &#x2F;&gt;
またはネットワーク分離を最大限にしたい特定のセキュリティが求められる環境で有用です。&lt;br &#x2F;&gt;
この状態では、コンテナは自身のプロセスやファイルシステムにアクセスできますが、&lt;br &#x2F;&gt;
外部のネットワークリソースにはアクセスできません。&lt;&#x2F;p&gt;
&lt;p&gt;要するに、普段何もネットワーク設定していなくとも、&lt;br &#x2F;&gt;
bridgeが設定されていたが、noneをすると、&lt;br &#x2F;&gt;
明示的にネットワークに接続できなくするという感じですかね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kontenanoipadoresuwoque-ren-surufang-fa&quot;&gt;コンテナのIPアドレスを確認する方法&lt;&#x2F;h2&gt;
&lt;p&gt;DockerコンテナのIPアドレスを確認するには、複数の方法があります。&lt;br &#x2F;&gt;
以下では、各方法をサンプルコードと共に解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kontenanei-deipyaifconfigkomandowoshi-u&quot;&gt;コンテナ内でipやifconfigコマンドを使う&lt;&#x2F;h3&gt;
&lt;p&gt;コンテナ内部から直接、ipやifconfigコマンドを使用してIPアドレスを確認することができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# コンテナに入る&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec -it [コンテナ名] bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# コンテナ内でIPアドレスを確認&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ip addr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# または&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ifconfig&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、この方法は、&lt;br &#x2F;&gt;
コンテナの種類によっては、&lt;br &#x2F;&gt;
そもそもipコマンドやifconfigコマンドがなかったりすることもあるので、&lt;br &#x2F;&gt;
いつでも使えるかというと微妙ではあります。&lt;&#x2F;p&gt;
&lt;p&gt;nginxコンテナとかでは使えませんでした。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-container-inspect&quot;&gt;docker container inspect&lt;&#x2F;h3&gt;
&lt;p&gt;docker container inspectでコンテナの詳細情報を調べることができます。&lt;br &#x2F;&gt;
これのNetworkSettingsを確認すると、IPアドレスがわかります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker container inspect [コンテナ名]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、JSON形式で多くの情報を出力します。&lt;br &#x2F;&gt;
その中からネットワーク関連の情報を見つけることができます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;formatopusiyondete-ding-noxiang-mu-dakequ-de-suru&quot;&gt;formatオプションで特定の項目だけ取得する&lt;&#x2F;h4&gt;
&lt;p&gt;docker container inspectの出力から特定の情報だけを取得するためには、--formatオプションを使用します。&lt;br &#x2F;&gt;
これにより、必要な情報だけを簡単に取得できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker container inspect --format &amp;#39;{{&#x2F;* .NetworkSettings.IPAddress *&#x2F;}}&amp;#39; [コンテナ名]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、指定されたコンテナのIPアドレスのみを出力します。&lt;br &#x2F;&gt;
おそらく、このやり方が一番合理的なのかなとは個人的には思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-network-inspect-bridge&quot;&gt;docker network inspect bridge&lt;&#x2F;h3&gt;
&lt;p&gt;docker network inspectコマンドを使用して、&lt;br &#x2F;&gt;
特定のネットワーク（この場合はbridge）に接続されているコンテナの情報を確認できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker network inspect bridge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、bridgeネットワークに接続されているすべてのコンテナの詳細情報を提供します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ipmasukaredonituite&quot;&gt;IPマスカレードについて&lt;&#x2F;h3&gt;
&lt;p&gt;IPアドレスに関連して、&lt;br &#x2F;&gt;
IPマスカレードという技術がありますが、&lt;br &#x2F;&gt;
そもそもIPマスカレードってなんだっけって私は最初なりました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;IPマスカレードは、DockerホストのIPアドレスを使用してコンテナからのアウトバウンド接続を可能にする&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;NAT（ネットワークアドレス変換）の一形態です。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
これにより、コンテナはDockerホストのIPアドレスを使用して外部と通信できます。&lt;&#x2F;p&gt;
&lt;p&gt;うん？どういうことって感じだと思うので、&lt;br &#x2F;&gt;
IPマスカレードの例えを出してみます。&lt;&#x2F;p&gt;
&lt;p&gt;アパートの部屋をコンテナとし、そこに一つの大きな郵便受けがあるとして、&lt;br &#x2F;&gt;
それをDockerホストとします。&lt;&#x2F;p&gt;
&lt;p&gt;アパートの部屋（コンテナ）から手紙（データパケット）を送るとき、&lt;br &#x2F;&gt;
部屋から出た手紙はまずアパートの郵便受けに集められ、そこから外部の世界（インターネット）に送られます。&lt;br &#x2F;&gt;
この手紙はアパートの住所（DockerホストのIPアドレス）でマークされます。&lt;br &#x2F;&gt;
つまり、外部の世界では、この手紙がどの部屋から来たのかはわかりません。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、手紙がアパートに戻ってくるときは、郵便受け（Dockerホスト）に届いた手紙は、&lt;br &#x2F;&gt;
どの部屋（コンテナ）宛てであるかに基づいて適切な部屋に配達されます。&lt;&#x2F;p&gt;
&lt;p&gt;このように、DockerのIPマスカレードは、&lt;br &#x2F;&gt;
コンテナから外部への通信がDockerホストを介して行われることを意味します。&lt;br &#x2F;&gt;
コンテナ自身のIPアドレスは外部には露見せず、外部から見るとすべての通信がDockerホストから来ているように見えることです。&lt;&#x2F;p&gt;
&lt;p&gt;この設定は特にbridgeネットワークで重要であり、&lt;br &#x2F;&gt;
コンテナがDockerホストを介して外部ネットワークと通信する際に用いられます。&lt;br &#x2F;&gt;
このプロセスは自動的に行われるため、ユーザーが手動で設定する必要はありません。&lt;&#x2F;p&gt;
&lt;p&gt;これらの方法を使用して、DockerコンテナのIPアドレスとネットワーク設定を効率的に確認し、管理することができます。&lt;br &#x2F;&gt;
これにより、ネットワークのトラブルシューティングや構成の最適化が容易になります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nattutehe-datuke&quot;&gt;NATって何だっけ？&lt;&#x2F;h4&gt;
&lt;p&gt;そもそも、NATって何だっけ？&lt;br &#x2F;&gt;
ネットワークまじよくわからん。&lt;&#x2F;p&gt;
&lt;p&gt;っていう感じの人もいるかもしれないので、&lt;br &#x2F;&gt;
一応補足します。(というか私が最初そうだった)&lt;&#x2F;p&gt;
&lt;p&gt;NAT（ネットワークアドレス変換）は、インターネットネットワーキングの重要な概念で、&lt;br &#x2F;&gt;
一つのネットワークアドレスを別のアドレスに変換する技術です。&lt;br &#x2F;&gt;
この技術により、複数のデバイスが一つのIPアドレスを共有してインターネットにアクセスすることが可能になります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;NATの基本的な役割は、プライベートIPアドレス（ローカルネットワーク内で使用されるアドレス）を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;公共IPアドレス（インターネット上で一意のアドレス）に変換することです&lt;&#x2F;mark&gt;。&lt;br &#x2F;&gt;
これにより、ネットワーク内の多くのデバイスが、一つの公共IPアドレスを共有してインターネットに接続できます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、自宅やオフィスのルーターがNATを使用しています。&lt;br &#x2F;&gt;
複数のコンピューター、スマートフォン、タブレットなどがローカルネットワークに接続されている場合、&lt;br &#x2F;&gt;
これらのデバイスはプライベートIPアドレスを持ちます。&lt;&#x2F;p&gt;
&lt;p&gt;インターネットにアクセスする際、ルーターがこれらのプライベートIPアドレスをルーター自身の公共IPアドレスに変換します。&lt;br &#x2F;&gt;
インターネットから見ると、これらのリクエストはすべて同じ公共IPアドレスから来ているように見えます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ipadoresudenokontenajian-notong-xin&quot;&gt;IPアドレスでのコンテナ間の通信&lt;&#x2F;h2&gt;
&lt;p&gt;Dockerコンテナ間でIPアドレスを用いた通信は、ネットワークの基本的な操作です。&lt;br &#x2F;&gt;
ここでは、異なるNginxコンテナを2つ立てて、それらの間で通信する方法をサンプルコードを交えて解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ipkomandodeipadoresuwoque-ren&quot;&gt;ipコマンドでIPアドレスを確認&lt;&#x2F;h3&gt;
&lt;p&gt;まず、2つのNginxコンテナを立てます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ1の作成&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx1 nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ2の作成&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx2 nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次に、これらのコンテナのIPアドレスを確認します。&lt;br &#x2F;&gt;
docker container inspectコマンドを使用して、各コンテナのIPアドレスを取得します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ1のIPアドレスを取得&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker container inspect -f &amp;#39;{{&#x2F;*range .NetworkSettings.Networks*&#x2F;}}{{&#x2F;*.IPAddress*&#x2F;}}{{&#x2F;*end*&#x2F;}}&amp;#39; nginx1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ2のIPアドレスを取得&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker container inspect -f &amp;#39;{{&#x2F;*range .NetworkSettings.Networks*&#x2F;}}{{&#x2F;*.IPAddress*&#x2F;}}{{&#x2F;*end*&#x2F;}}&amp;#39; nginx2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;pingkomandonoji-ben-de-nashi-ifang&quot;&gt;pingコマンドの基本的な使い方&lt;&#x2F;h3&gt;
&lt;p&gt;IPアドレスでのコンテナ間での疎通に際し、&lt;br &#x2F;&gt;
pingコマンドを使うのですが、意外とpingって、&lt;br &#x2F;&gt;
使い方忘れがちな気がするので、おさらいも兼ねて、&lt;br &#x2F;&gt;
軽く概要を説明しておきます。&lt;&#x2F;p&gt;
&lt;p&gt;pingコマンドは、ネットワーク上の他のコンピューターやデバイスとの接続を確認するために使用されるコマンドです。&lt;br &#x2F;&gt;
このコマンドは、インターネットプロトコル（IP）アドレスまたはホスト名を指定して、そのデバイスへの接続をテストします。&lt;&#x2F;p&gt;
&lt;p&gt;よく使うオプションとしては、-c(回数)や-t(応答を待つ最大時間)などがあげられます&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ping -c 4 google.com # 4回送信する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ping -t 10 google.com  # 10秒待つ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;zi-fen-norutanipingwosong-xin-suru&quot;&gt;自分のルーターにpingを送信する&lt;&#x2F;h4&gt;
&lt;p&gt;pingの活用例として、&lt;br &#x2F;&gt;
自分のルーターにpingを送って、&lt;br &#x2F;&gt;
ネットワークの遅延(レイテンシ)を測定してみましょう。&lt;&#x2F;p&gt;
&lt;p&gt;まず、macで自分のルーターのIPアドレスを調べるには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;netstat -nr | grep default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を実行して表示されたIPアドレスです。&lt;&#x2F;p&gt;
&lt;p&gt;早速おくります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ping ルーターのipアドレス&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;だいたい、1ms-30msぐらいなら、&lt;br &#x2F;&gt;
良い応答時間かと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pingdeshu-tong-suru&quot;&gt;pingで疎通する&lt;&#x2F;h3&gt;
&lt;p&gt;取得したIPアドレスを使用して、コンテナ間の疎通を確認します。&lt;br &#x2F;&gt;
docker execコマンドを使用して、一方のコンテナから他方のコンテナへのpingテストを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginx1からNginx2へのpingテスト&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec nginx1 ping -c 4 [Nginx2のIPアドレス]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginx2からNginx1へのpingテスト&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec nginx2 ping -c 4 [Nginx1のIPアドレス]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;curldekontentugaqu-de-dekiruka&quot;&gt;curlでコンテンツが取得できるか&lt;&#x2F;h3&gt;
&lt;p&gt;最後に、curlコマンドを使用して、&lt;br &#x2F;&gt;
一方のコンテナが他方のコンテナのWebサービス（Nginx）にアクセスできるかを確認します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginx1からNginx2のWebページを取得&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec nginx1 curl [Nginx2のIPアドレス]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginx2からNginx1のWebページを取得&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec nginx2 curl [Nginx1のIPアドレス]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;kontenaming-denokontenajian-tong-xin&quot;&gt;コンテナ名でのコンテナ間通信&lt;&#x2F;h2&gt;
&lt;p&gt;dockerでは、コンテナ間での通信を容易にするためにコンテナ名を利用できます。&lt;br &#x2F;&gt;
ここでは、nginxコンテナを例に、コンテナ名を使用した通信方法とそれに関連するオプションについて説明します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;linkopusiyon&quot;&gt;linkオプション&lt;&#x2F;h3&gt;
&lt;p&gt;linkオプションは、一方のコンテナを別のコンテナにリンクするために使用されます。&lt;br &#x2F;&gt;
これにより、リンクされたコンテナは、他のコンテナの名前で通信できるようになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ1を作成&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx1 nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナ2を作成し、nginx1にリンクする&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx2 --link nginx1 nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;etc-hostsgashu-kihuan-waru&quot;&gt;&#x2F;etc &#x2F;hostsが書き換わる&lt;&#x2F;h4&gt;
&lt;p&gt;linkオプションを使用すると、リンクされたコンテナの&#x2F;etc&#x2F;hostsファイルが自動的に更新され、&lt;br &#x2F;&gt;
リンク先のコンテナ名とIPアドレスが追加されます。これにより、コンテナ名での通信が可能になります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-network-create&quot;&gt;docker network create&lt;&#x2F;h3&gt;
&lt;p&gt;Dockerでは、カスタムネットワークを作成してコンテナ間の通信を管理することができます。&lt;br &#x2F;&gt;
&lt;strong&gt;カスタムネットワーク内では、コンテナは互いの名前で直接通信できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# カスタムネットワークを作成&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker network create my-network&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Nginxコンテナをカスタムネットワークに接続&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx1 --network my-network nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name nginx2 --network my-network nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;--network（または-net）オプションを使用して、コンテナが接続するネットワークを指定できます。&lt;br &#x2F;&gt;
カスタムネットワークを使用すると、コンテナ名での通信が簡単になります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;connecttodisconnectkomando&quot;&gt;connectとdisconnectコマンド&lt;&#x2F;h3&gt;
&lt;p&gt;既存のコンテナをネットワークに接続したり、&lt;br &#x2F;&gt;
ネットワークから切断したりするためにdocker network connectおよびdocker network disconnectコマンドを使用できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# コンテナをカスタムネットワークに接続&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker network connect my-network nginx1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# コンテナをネットワークから切断&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker network disconnect my-network nginx1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;dockernetutowakudenokontenaming-denotong-xin-noshi-zu-mi&quot;&gt;Dockerネットワークでのコンテナ名での通信の仕組み&lt;&#x2F;h2&gt;
&lt;p&gt;Dockerネットワークでは、コンテナ間の通信にコンテナ名を使用することができることがわかりました。&lt;br &#x2F;&gt;
この機能の背後には、Dockerの内部DNSサーバーと特定の設定ファイルが関与しています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dnssabagashi-wareteiru&quot;&gt;DNSサーバーが使われている&lt;&#x2F;h3&gt;
&lt;p&gt;Dockerでは、デフォルトで内部DNSサーバーが組み込まれており、これがコンテナ間の名前解決を担当します。&lt;br &#x2F;&gt;
Dockerネットワーク内では、各コンテナはそのコンテナ名でアクセス可能です。&lt;br &#x2F;&gt;
この内部DNSサーバーによって、コンテナ名が対応するIPアドレスに変換され、コンテナ間での通信が実現されます。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerのデフォルトの内部DNSサーバーを確認する方法は、&lt;br &#x2F;&gt;
実際にコンテナ内でネットワーク関連の設定を調べることになります。&lt;br &#x2F;&gt;
具体的には、コンテナ内の&#x2F;etc&#x2F;resolv.confファイルを確認することで、&lt;br &#x2F;&gt;
どのDNSサーバーが使用されているかを見ることができます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;etc-resolve-conftoha&quot;&gt;&#x2F; etc&#x2F;resolve.confとは&lt;&#x2F;h3&gt;
&lt;p&gt;&#x2F;etc&#x2F;resolv.confは、UNIX系オペレーティングシステムにおいてDNSサーバーの設定を管理するファイルです。&lt;br &#x2F;&gt;
Dockerコンテナ内でも、このファイルがDNS解決のための設定情報を持っています。&lt;br &#x2F;&gt;
Dockerはコンテナを起動する際に、このファイルに適切なDNS設定を自動的に注入します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;somosomodnstutenandatutuke&quot;&gt;そもそもDNSってなんだっっけ？&lt;&#x2F;h3&gt;
&lt;p&gt;DNS（ドメインネームシステム）は、&lt;br &#x2F;&gt;
インターネット上のリソースに対応するIPアドレスを人間が読みやすいドメイン名（例：www.example.com）&lt;br &#x2F;&gt;
に変換するためのシステムです。&lt;br &#x2F;&gt;
DNSサーバーは、これらのドメイン名をIPアドレスに変換する役割を担っています。&lt;br &#x2F;&gt;
このプロセスにより、ユーザーはウェブブラウザなどで直接IPアドレスを入力する代わりに、&lt;br &#x2F;&gt;
覚えやすいドメイン名を使用してインターネット上のリソースにアクセスできます。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000008568653.jpg&quot; alt=&quot;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築【電子書籍】[ 大澤 文孝 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築【電子書籍】[ 大澤 文孝 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%81%95%E3%82%8F%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%80%80docker%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20%E5%A4%A7%E6%BE%A4%20%E6%96%87%E5%AD%9D%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;e38810fc4f623003975fa31922fa3f74&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784295005520.jpg&quot; alt=&quot;Docker実践ガイド第2版 コンテナ環境の構築・運用・活用 （impress　top　gear） [ 古賀政純 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Docker実践ガイド第2版 コンテナ環境の構築・運用・活用 （impress　top　gear） [ 古賀政純 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Docker%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%E7%AC%AC2%E7%89%88%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89%E3%83%BB%E9%81%8B%E7%94%A8%E3%83%BB%E6%B4%BB%E7%94%A8%20%EF%BC%88impress%E3%80%80top%E3%80%80gear%EF%BC%89%20%5B%20%E5%8F%A4%E8%B3%80%E6%94%BF%E7%B4%94%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15785274&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Nginx入門】Docker&#x2F;NginxでのWebサーバー構築とSSL設定</title>
        <published>2023-11-20T00:00:00+00:00</published>
        <updated>2023-11-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/nginx/"/>
        <id>https://reisuta.com/nginx/</id>
        
        <content type="html" xml:base="https://reisuta.com/nginx/">&lt;p&gt;Webサーバーに対する知識は、&lt;br &#x2F;&gt;
Webエンジニアの必須教養のはずですが、&lt;br &#x2F;&gt;
意外と実務で触れる機会は少なかったりします。&lt;&#x2F;p&gt;
&lt;p&gt;特にnginxなどは、&lt;br &#x2F;&gt;
慣れていないとかなり戸惑うと思いますし、&lt;br &#x2F;&gt;
苦手意識をいだきやすいかもしれません(私がそうでした。)&lt;&#x2F;p&gt;
&lt;p&gt;しかし、なんだかんだで、&lt;br &#x2F;&gt;
&lt;mark&gt;本番環境のWebサーバとして、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Nginxが使われている現場は多い印象&lt;&#x2F;mark&gt;があり、&lt;br &#x2F;&gt;
場合によっては、非インフラエンジニアも、&lt;br &#x2F;&gt;
このNginxの知識が必要になったりする場面もあるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では、&lt;br &#x2F;&gt;
今更聞けないNginxの基礎から、SSL(自己署名証明書)設定をして、&lt;br &#x2F;&gt;
Hello worldを表示するWebサーバー構築を行いたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxは、インフラ設定をする際には、&lt;br &#x2F;&gt;
かなりの確率で触ることになると思うので、&lt;br &#x2F;&gt;
ぜひとも習熟したいところですよね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nginxtoha&quot;&gt;Nginxとは&lt;&#x2F;h2&gt;
&lt;p&gt;Nginxは、高性能かつ軽量なウェブサーバーで、&lt;br &#x2F;&gt;
特に大規模なウェブアプリケーションや高トラフィック環境での使用に適しています。&lt;&#x2F;p&gt;
&lt;p&gt;その特徴の一つが、&lt;mark&gt;イベント駆動型アーキテクチャ&lt;&#x2F;mark&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxのイベント駆動型アーキテクチャは、高性能かつ効率的なWebサーバーとしての性能を実現するための重要な要素です。&lt;br &#x2F;&gt;
このアーキテクチャを理解するために、いくつかの基本的な概念を明確にする必要があります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ibentoqu-dong-xing-akitekutiya&quot;&gt;イベント駆動型アーキテクチャ&lt;&#x2F;h3&gt;
&lt;p&gt;Nginxの核心となるのは、イベント駆動型アーキテクチャです。&lt;br &#x2F;&gt;
この設計により、Nginxは多数のリクエストを同時に効率的に処理できます。&lt;br &#x2F;&gt;
従来のスレッドベースのアプローチと異なり、リソースの消費が少なく、スケーラビリティが高いのが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;通常のプログラムは、main関数から開始され、特定の順序で関数が呼び出されます。&lt;br &#x2F;&gt;
しかし、イベント駆動アーキテクチャでは、プログラムの主要な流れはイベント&lt;br &#x2F;&gt;
（例えば、クライアントからの接続要求やファイルへのアクセス要求など）によって駆動されます。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptとかでのクリックイベントとかをイメージするとわかりやすいと思います。&lt;br &#x2F;&gt;
JavaScriptでクリックすると、そのclickイベントによってコールバック関数が呼ばれると思いますが、&lt;br &#x2F;&gt;
Nginxでもそういったアーキテクチャが採用されているという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxでのイベントは、&lt;br &#x2F;&gt;
上記でも触れましたが、クライアントからの接続要求などがあたります。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxでは、これらのイベントが発生すると、&lt;br &#x2F;&gt;
それに対応するコールバック関数（イベントリスナー）が呼び出されることによって処理が進行します。&lt;br &#x2F;&gt;
これにより、非常に効率的でスケーラブルな処理が可能になります​​。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nonburotukingui-o&quot;&gt;ノンブロッキングI&#x2F;O:&lt;&#x2F;h4&gt;
&lt;p&gt;ブロッキングI&#x2F;Oでは、ファイルやネットワークリソースへのアクセスが完了するまで&lt;br &#x2F;&gt;
プログラムの実行が停止（ブロック）されます。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、ノンブロッキングI&#x2F;Oでは、リソースが利用可能になるまで待たずに、&lt;br &#x2F;&gt;
即座にエラーを返すなどして、プログラムの実行を続けることができます。&lt;br &#x2F;&gt;
Nginxでは、このノンブロッキングI&#x2F;Oを利用することで、プログラムの並行性を高め、効率的なリソース利用が可能になります​​。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;i-otoha&quot;&gt;I&#x2F;Oとは？&lt;&#x2F;h4&gt;
&lt;p&gt;そもそも、I&#x2F;Oって何かっていうと、&lt;br &#x2F;&gt;
I&#x2F;O（Input&#x2F;Output、入出力)のことで、&lt;br &#x2F;&gt;
コンピューターや電子機器において、データや信号の入力と出力のプロセスを指しています。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、コンピューターシステムが外部の装置や他のシステムからデータを受け取る（入力）ことと、&lt;br &#x2F;&gt;
それらにデータを送る（出力）ことを意味します​​。&lt;&#x2F;p&gt;
&lt;p&gt;I&#x2F;Oとして同期I&#x2F;Oと非同期I&#x2F;Oの二つがあり、&lt;br &#x2F;&gt;
同期I&#x2F;O（ブロッキングI&#x2F;O）は、&lt;br &#x2F;&gt;
データの送受信が完了するまで他の処理は待機します。&lt;br &#x2F;&gt;
I&#x2F;O処理が始まると、他の処理は一時的に停止し、送受信が完了してから他の処理が再開されます​​。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、非同期I&#x2F;O（ノンブロッキングI&#x2F;O）は、&lt;br &#x2F;&gt;
データの送受信が完了するのを待たずに他の処理を進めることができます。&lt;br &#x2F;&gt;
I&#x2F;O処理と並行して他の処理を進めることができ、送受信が必要な処理にたどり着いた時点で、その完了を待ちます。&lt;&#x2F;p&gt;
&lt;p&gt;Nginxの場合、ノンブロッキングI&#x2F;Oとして、&lt;br &#x2F;&gt;
即座にエラーを返してブロックされるのを防ぐため、&lt;br &#x2F;&gt;
厳密には非同期I&#x2F;OとノンブロッキングI&#x2F;Oは、&lt;br &#x2F;&gt;
同義ではないかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;e-words.jp&#x2F;w&#x2F;I-O.html#:~:text=&quot;&gt;https:&#x2F;&#x2F;e-words.jp&#x2F;w&#x2F;I-O.html#:~:text=&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;非同期I&#x2F;Oは、データの入出力が可能になった時点で通知されるI&#x2F;Oモデルです。&lt;br &#x2F;&gt;
これにより、通知が来るまでアプリケーションは他の処理を進めることができます。&lt;br &#x2F;&gt;
これに対して、ノンブロッキングI&#x2F;Oでは、I&#x2F;O対象のファイルディスクリプタが準備完了していない場合、&lt;br &#x2F;&gt;
アプリケーションに即座にエラーが返されます。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ryuichi1208.hateblo.jp&#x2F;entry&#x2F;2020&#x2F;02&#x2F;19&#x2F;215155#:~:text=&quot;&gt;https:&#x2F;&#x2F;ryuichi1208.hateblo.jp&#x2F;entry&#x2F;2020&#x2F;02&#x2F;19&#x2F;215155#:~:text=&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これにより、プロセスがI&#x2F;O操作の完了を待つことなく、他のタスクに切り替えられるということです​​。&lt;&#x2F;p&gt;
&lt;p&gt;正直、この辺の厳密な違いは、かなり細かいかつ、&lt;br &#x2F;&gt;
とりあえずNginxを使うレベルであれば、&lt;br &#x2F;&gt;
不要な知識のような気もしますが念のため...&lt;&#x2F;p&gt;
&lt;p&gt;まあ、何が言いたいかというと、&lt;br &#x2F;&gt;
&lt;mark&gt;Nginxは、こういったノンブロッキングI&#x2F;Oや非同期I&#x2F;Oを採用しているので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;並行性が高く、効率的だということです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;masutapurosesutowakapurosesunomarutipurosesugou-cheng&quot;&gt;マスタープロセスとワーカープロセスのマルチプロセス構成&lt;&#x2F;h4&gt;
&lt;p&gt;Nginxは、一つのマスタープロセスと複数のワーカープロセスで構成されています。&lt;br &#x2F;&gt;
マスタープロセスは設定の読み込みや全体の管理を担い、ワーカープロセスが実際のリクエストの処理を行います。&lt;br &#x2F;&gt;
この構成により、複数のプロセスが並行して動作し、高いパフォーマンスと信頼性を実現します​​。&lt;&#x2F;p&gt;
&lt;p&gt;これについては、&lt;br &#x2F;&gt;
下記の記事がわかりやすかったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;kamihork&#x2F;items&#x2F;296ee689a8d48c2bebcd#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;kamihork&#x2F;items&#x2F;296ee689a8d48c2bebcd#%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nginxyi-wai-nowebsaba&quot;&gt;Nginx以外のWebサーバー&lt;&#x2F;h3&gt;
&lt;p&gt;さて、ここまでNginxの特徴を見てきましたが、&lt;br &#x2F;&gt;
抽象的な話が続いたので、結局Nginxってすごいの？ってなるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Webサーバとしては、&lt;br &#x2F;&gt;
他にもApache、IIS、Lighttpdなどのウェブサーバーが存在します。&lt;&#x2F;p&gt;
&lt;p&gt;試しに、有名なApacheと軽く比較考察してみます。&lt;&#x2F;p&gt;
&lt;p&gt;Apacheのアーキテクチャとして、主に「Multi Processing Module (MPM)」が採用されています。&lt;br &#x2F;&gt;
これは、Apacheの処理モデルを定義するもので、ApacheにはいくつかのMPMが存在します。&lt;br &#x2F;&gt;
主要なMPMとして「prefork」「worker」「event」があります​​。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、Prefork MPMは、Apacheが古くから使用している方式で、&lt;br &#x2F;&gt;
基本的には1つのプロセスが1つのスレッドを持つシングルスレッドプロセスモデルを採用しています。&lt;br &#x2F;&gt;
この方式では、各httpdプロセスが1つのCPUコアを使用してリクエストを処理します。&lt;br &#x2F;&gt;
トラフィックが増加すると、システムは新しいプロセスを生成（fork）してリクエストを処理します​​。&lt;&#x2F;p&gt;
&lt;p&gt;他のWorker MPMでは、1つのプロセスが複数のスレッドを持つ「マルチスレッドプロセス」方式を採用しています。&lt;br &#x2F;&gt;
これにより、より少ないプロセス数で多くのリクエストを同時に処理することが可能になります​​。&lt;&#x2F;p&gt;
&lt;p&gt;本記事は、Apacheの記事ではないので、&lt;br &#x2F;&gt;
Apacheの詳細はこれぐらいにしておきます。&lt;br &#x2F;&gt;
MPMの解説は、下記の記事がわかりやすかったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;milestone-of-se.nesuke.com&#x2F;sv-basic&#x2F;linux-basic&#x2F;apache-mpm-prefork-worker-event&#x2F;#:~:text=,%E3%81%A8%20worker%20%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E3%82%88%E3%82%8A%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%81%AF%E3%80%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%EF%BC%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%EF%BC%89%E3%81%8C%20CPU%20%E3%82%92%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B%E3%82%92%E7%9F%A5%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E4%BB%A5%E4%B8%8B%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AB%E6%A6%82%E8%A6%81%E3%82%92%E8%A7%A3%E8%AA%AC%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%AE%E3%81%A7%E4%BD%B5%E3%81%9B%E3%81%A6%E3%81%94%E5%8F%82%E7%85%A7%E4%B8%8B%E3%81%95%E3%81%84%E3%80%82&quot;&gt;https:&#x2F;&#x2F;milestone-of-se.nesuke.com&#x2F;sv-basic&#x2F;linux-basic&#x2F;apache-mpm-prefork-worker-event&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;apachetobi-jiao-sitanginxnoqiang-mi&quot;&gt;Apacheと比較したNginxの強み&lt;&#x2F;h4&gt;
&lt;p&gt;Nginxは、その高いパフォーマンス、低リソース消費、設定のしやすさにより、&lt;br &#x2F;&gt;
多くの開発者に選ばれています。&lt;&#x2F;p&gt;
&lt;p&gt;また、静的コンテンツの配信、ロードバランシング、キャッシュ機能、&lt;br &#x2F;&gt;
リバースプロキシとしての使用など、様々な機能を提供します。&lt;&#x2F;p&gt;
&lt;p&gt;Apacheの先述のアーキテクチャとNginxを比較すると、&lt;br &#x2F;&gt;
&lt;mark&gt;Nginxのイベント駆動型およびノンブロッキングI&#x2F;Oアーキテクチャが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;特に同時大量アクセスの処理において優れていることがわかります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Prefork MPMのようなシングルスレッドプロセスモデルでは、&lt;br &#x2F;&gt;
大量の同時リクエストに対応するために多くのプロセスを生成する必要があり、これはメモリとCPUリソースの大きな消費につながります。&lt;br &#x2F;&gt;
一方で、Nginxのモデルでは、少数のワーカープロセスで多数の接続を非同期に処理することができ、&lt;br &#x2F;&gt;
リソース消費を大幅に抑えることが可能です。&lt;&#x2F;p&gt;
&lt;p&gt;その結果、Nginxは高トラフィックの環境においてApacheよりも高いスケーラビリティと効率を提供します。&lt;br &#x2F;&gt;
また、静的コンテンツの配信においてもApacheより高速なレスポンスが期待できます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nginxtodockerdewebsabawogou-zhu&quot;&gt;NginxとDockerでWEBサーバーを構築&lt;&#x2F;h2&gt;
&lt;p&gt;Dockerを使わずに、&lt;br &#x2F;&gt;
nginxのソースコードをダウンロードして、&lt;br &#x2F;&gt;
zlibとか必要ライブラリをインストールして、&lt;br &#x2F;&gt;
.&#x2F;configureして、&lt;br &#x2F;&gt;
makeして、make installという、&lt;br &#x2F;&gt;
あの例の儀式を行って環境構築するのも勉強になって、&lt;br &#x2F;&gt;
それはそれでいいのですが、今回は大変なので&lt;br &#x2F;&gt;
Dockerで済ませます...&lt;&#x2F;p&gt;
&lt;p&gt;Dockerを利用することで、環境に依存せず、&lt;br &#x2F;&gt;
一貫した方法でNginxサーバーを構築できますよね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dockerdenginxkontenawozuo-cheng-suru&quot;&gt;DockerでNginxコンテナを作成する&lt;&#x2F;h3&gt;
&lt;p&gt;以下は、Dockerを用いてNginxコンテナを作成し起動する基本的なコマンドです。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;nginx&quot;&gt;nginxのコンテナ&lt;&#x2F;a&gt;を引っ張って、立ち上げているだけですね。&lt;br &#x2F;&gt;
(Dockerはインストールされているものとする)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pull nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; my-nginx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 80:80&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というか、runの実行時に、&lt;br &#x2F;&gt;
ローカルにnginxイメージがなければ、&lt;br &#x2F;&gt;
取得してくれるので、ぶっちゃけ、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run --name my-nginx -p 8080:80 -d nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;だけでも大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;--name my-nginxは、起動するコンテナに「my-nginx」という名前を割り当てていて、&lt;br &#x2F;&gt;
-p 8080:80は、ローカルマシンの8080ポートをコンテナの80ポートにマッピングしています。&lt;br &#x2F;&gt;
つまり、ローカルマシンの8080ポートへのリクエストは、コンテナの80ポートに転送されるという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;-dはコンテナをデタッチモード（バックグラウンドモード）で実行し、&lt;br &#x2F;&gt;
最後のnginxは、イメージの名前です。Docker Hubにあるnginx公式イメージですね。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerじゃなくて、&lt;br &#x2F;&gt;
普通にnginxをインストールしたら、&lt;br &#x2F;&gt;
systemctl start nginx的な感じで、&lt;br &#x2F;&gt;
startさせる必要がありますが、&lt;br &#x2F;&gt;
Dockerコンテナの場合、コンテナを起動すれば、&lt;br &#x2F;&gt;
立ち上がっています。&lt;&#x2F;p&gt;
&lt;p&gt;なので、この状態で、localhost:8080に&lt;br &#x2F;&gt;
アクセスすれば、下記のようなページになっているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nginx&#x2F;Screenshot-2023-11-15-at-19.55.09.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Dockerの基本的な操作とか概念については、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で解説しているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;hello-worldhua-mian-wobiao-shi-suru&quot;&gt;hello world画面を表示する&lt;&#x2F;h3&gt;
&lt;p&gt;さて、DockerでNginxを起動したので、簡単なHTMLページを表示する手順を説明します。&lt;br &#x2F;&gt;
とりあえず、何でもいいのですが、適当なHTMLファイルを作ります。ローカルに保存して大丈夫です&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;title&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello World&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;title&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello World!&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、ローカルにこんな感じで、&lt;br &#x2F;&gt;
適当なHTMLファイルを作ったら、&lt;br &#x2F;&gt;
それをNginxコンテナに渡して上げる必要があるので、&lt;br &#x2F;&gt;
ここではdocker cpを使います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker cp index.html my-nginx:&#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html&#x2F;index.html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、index.htmlをmy-nginxコンテナの、&lt;br &#x2F;&gt;
&#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html&#x2F;index.htmlにコピーするコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;一応、これでもうHello Worldは表示されているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nginx&#x2F;Screenshot-2023-11-15-at-20.02.00.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、なぜこのコマンドで表示されるのかが、&lt;br &#x2F;&gt;
まだ不可解なので解説します。&lt;&#x2F;p&gt;
&lt;p&gt;まず、Nginxの設定ファイルは、デフォルトだと、&lt;br &#x2F;&gt;
&#x2F;etc&#x2F;nginx&#x2F;nginx.confになります。&lt;&#x2F;p&gt;
&lt;p&gt;このファイルの中身を見てみましょう。&lt;br &#x2F;&gt;
まずコンテナに入りましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec -it my-nginx &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コンテナに入ったら、&#x2F;etc&#x2F;nginx&#x2F;nginx.confを見てみましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;user&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  nginx&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;worker_processes&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  auto&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;error_log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &#x2F;var&#x2F;log&#x2F;nginx&#x2F;error.log notice&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;pid&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &#x2F;var&#x2F;run&#x2F;nginx.pid&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;events&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    worker_connections&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;  1024&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;       &#x2F;etc&#x2F;nginx&#x2F;mime.types&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    default_type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  application&#x2F;octet-stream&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    log_format&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  main  &amp;#39;$remote_addr - $remote_user [$time_local] &amp;quot;$request&amp;quot; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;                      &amp;#39;$status $body_bytes_sent &amp;quot;$http_referer&amp;quot; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;                      &amp;#39;&amp;quot;$http_user_agent&amp;quot; &amp;quot;$http_x_forwarded_for&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    access_log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &#x2F;var&#x2F;log&#x2F;nginx&#x2F;access.log  main&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    sendfile&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        on&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;    #tcp_nopush     on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    keepalive_timeout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;  65&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;    #gzip  on;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    include&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;etc&#x2F;nginx&#x2F;conf.d&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.conf&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここで注目したいのは、一番最後の、&lt;br &#x2F;&gt;
&lt;mark&gt;include &#x2F;etc&#x2F;nginx&#x2F;conf.d&#x2F;*.confの部分ですね。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;これは、conf.d以下の末尾が.confの設定を読み込むという記述です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;試しに、conf.d以下をlsしてみると、&lt;br &#x2F;&gt;
default.confというファイルがあるはずです。&lt;br &#x2F;&gt;
そこの設定が読み込まれているというわけです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;server {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    listen       80;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    listen  [::]:80;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server_name  localhost;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    #access_log  &#x2F;var&#x2F;log&#x2F;nginx&#x2F;host.access.log  main;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    location &#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        root   &#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        index  index.html index.htm;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    #error_page  404              &#x2F;404.html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # redirect server error pages to the static page &#x2F;50x.html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    #&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    error_page   500 502 503 504  &#x2F;50x.html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    location = &#x2F;50x.html {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        root   &#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;以下省略&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここの設定を見ると、&lt;br &#x2F;&gt;
&lt;strong&gt;root &#x2F;usr&#x2F;share&#x2F;nginx&#x2F;htmlという部分があると思います。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;すなわち、ここで表示するhtmlのディレクトリを設定していたという感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これにより、先程のdocker cpコマンドで&lt;br &#x2F;&gt;
hello worldが表示されるようになったという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、docker cpのようなホストPCとコンテナのデータ共有(主にボリューム周り)&lt;br &#x2F;&gt;
については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-volume&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;で詳しく解説しているので、&lt;br &#x2F;&gt;
良ければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;2130&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sslshe-ding&quot;&gt;SSL設定&lt;&#x2F;h2&gt;
&lt;p&gt;※書く順番を間違えてしまったのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;OS再起動が挟まるかもしれない関係で、先に最後のホストファイルの編集をやってから、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;こちらのSSL設定をしたほうが、余計な修正が出なくていいかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nginxを使うときは、&lt;br &#x2F;&gt;
SSLの設定をすることも多いと思うので、&lt;br &#x2F;&gt;
それについても紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにこのあとからは、&lt;br &#x2F;&gt;
ポートが80ではなく、443になるので、&lt;br &#x2F;&gt;
dockerのポートも変更しておきます。&lt;br &#x2F;&gt;
(私はこれを忘れて結構はまりました)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run --name my-nginx -p 443:443 -d nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sslzheng-ming-shu-toha&quot;&gt;SSL証明書とは&lt;&#x2F;h3&gt;
&lt;p&gt;SSL証明書は、ウェブサーバーの身元を認証し、データの暗号化を可能にするデジタル証明書です。&lt;br &#x2F;&gt;
証明書は、信頼できる第三者機関（CA）によって発行されます。&lt;br &#x2F;&gt;
開発環境やテスト環境なら、opensslで生成した自己署名証明書で良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは公的な認証局（CA）によって発行された証明書ではないため、&lt;br &#x2F;&gt;
一般のウェブサイトでの使用には適していません。&lt;br &#x2F;&gt;
ブラウザはこれらの証明書を信頼せず、訪問者にセキュリティ警告を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;なので、あくまで開発環境など向けにはなります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;openssltoha&quot;&gt;OpenSSLとは&lt;&#x2F;h3&gt;
&lt;p&gt;OpenSSLは、主に暗号化およびセキュリティ関連の機能を提供するもので、&lt;br &#x2F;&gt;
SSLおよびTLSプロトコルの実装で最も広く使用され、&lt;br &#x2F;&gt;
インターネット上でのデータ通信のセキュリティを強化するために重要な役割を果たしています。&lt;&#x2F;p&gt;
&lt;p&gt;主な機能としては、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;ポイント&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#757575&quot; bordercolor=&quot;#BDBDBD&quot; bgcolor=&quot;#ffffff&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;SSL&#x2F;TLSプロトコルの実装&lt;&#x2F;li&gt;
&lt;li&gt;暗号化アルゴリズムの提供&lt;&#x2F;li&gt;
&lt;li&gt;デジタル証明書の管理&lt;&#x2F;li&gt;
&lt;li&gt;暗号化キーの生成と管理&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;などがあげられます。&lt;&#x2F;p&gt;
&lt;p&gt;一番、よく使うのが、&lt;br &#x2F;&gt;
やはり本記事での使用のような、&lt;br &#x2F;&gt;
SSL設定ですが、文書の暗号化とか、&lt;br &#x2F;&gt;
SSHの鍵生成みたいな使い方もできるので、&lt;br &#x2F;&gt;
割となんでもツールみたいな側面はあるかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;openssldenozi-ji-shu-ming-zheng-ming-shu-nosheng-cheng&quot;&gt;OpenSSLでの自己署名証明書の生成&lt;&#x2F;h3&gt;
&lt;p&gt;最初に秘密鍵を生成します。これはSSL証明書の暗号化と復号に使用されます。&lt;br &#x2F;&gt;
下記のコマンドは、2048ビットのRSA秘密鍵を生成し、その鍵を &quot;sample-nginx.key&quot; という名前のファイルに保存します。&lt;br &#x2F;&gt;
genrsaは、RSA秘密鍵を生成するという感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;openssl genrsa -out sample-nginx.key 2048&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次に、CSR（証明書署名リクエスト）の作成を行います。&lt;br &#x2F;&gt;
CSRは、証明書の発行を認証局にリクエストする際に使用されるファイルです。&lt;br &#x2F;&gt;
自己署名証明書の場合、このステップでは証明書の詳細（ドメイン名、組織名など）を含めます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;openssl req -new -key sample-nginx.key -out sample-nginx.csr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;既存の秘密鍵（ここでは「sample-nginx.key」というファイル）を基にして行われ、&lt;br &#x2F;&gt;
生成されたCSRは「sample-nginx.csr」として保存されます。&lt;&#x2F;p&gt;
&lt;p&gt;これを実行すると、色々聞かれますが、&lt;br &#x2F;&gt;
開発環境なので、多少情報は適当でも大丈夫かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Common Nameの部分は、&lt;br &#x2F;&gt;
&lt;strong&gt;ドメイン名なので、ここだけちゃんと入力しましょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらが終わったら、最後に自己署名証明書の作成します&lt;br &#x2F;&gt;
秘密鍵とCSRを使用してSSL証明書を自己署名します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;openssl x509 -req -days 365 -in sample-nginx.csr -signkey sample-nginx.key -out sample-nginx.crt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、証明書署名要求（CSR）から自己署名されたSSL&#x2F;TLS証明書を生成します。&lt;br &#x2F;&gt;
x509はX.509証明書を処理するためのオプションです。&lt;br &#x2F;&gt;
X.509は、SSL&#x2F;TLSなどで使用されるデジタル証明書の標準フォーマットです。&lt;&#x2F;p&gt;
&lt;p&gt;-reqは、CSRから証明書を生成することを意味します。&lt;br &#x2F;&gt;
-days 365は、証明書の有効期限を設定します。この例では、365日間となっています。&lt;&#x2F;p&gt;
&lt;p&gt;-in sample-nginx.csrで、入力として使用するCSRファイルを指定します。&lt;br &#x2F;&gt;
ここでは「sample-nginx.csr」というファイルです。&lt;&#x2F;p&gt;
&lt;p&gt;-signkey sample-nginx.keyは、CSRに署名するために使用する秘密鍵を指定します。&lt;br &#x2F;&gt;
この例では「sample-nginx.key」という秘密鍵を使用します。&lt;&#x2F;p&gt;
&lt;p&gt;-out sample-nginx.crtで生成された証明書を保存するファイル名を指定します。&lt;br &#x2F;&gt;
ここでは「sample-nginx.crt」という名前のファイルに保存されます。&lt;&#x2F;p&gt;
&lt;p&gt;そうして、コマンドの結果は、自己署名されたSSL&#x2F;TLS証明書です。&lt;br &#x2F;&gt;
これで、sample-nginx.crt（自己署名証明書)とかが生成されているはずです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nginxdenosslshe-ding&quot;&gt;NginxでのSSL設定&lt;&#x2F;h3&gt;
&lt;p&gt;次は、生成した、鍵と証明書をNginxコンテナに配置します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker cp sample-nginx.crt my-nginx:&#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker cp sample-nginx.key my-nginx:&#x2F;etc&#x2F;ssl&#x2F;private&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次にコンテナのnginxの設定ファイルを編集する必要があるので、&lt;br &#x2F;&gt;
もう一度コンテナに入ります。&lt;&#x2F;p&gt;
&lt;p&gt;コンテナに入ったらVimで編集！って行きたいところなんですが、&lt;br &#x2F;&gt;
ちょっと困ったことが。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nginx&#x2F;Screenshot-2023-11-15-at-20.32.42.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なに、まさかのviが使えんとは。&lt;&#x2F;p&gt;
&lt;p&gt;さっきみたいに、ローカルでnginxの設定ファイルを使って、&lt;br &#x2F;&gt;
docker cpするみたいな感じでもいいのですが、&lt;br &#x2F;&gt;
やっぱvimmerとしてはvimが使えない環境は見過ごせない。&lt;&#x2F;p&gt;
&lt;p&gt;ということでvimを使えるようにします。&lt;br &#x2F;&gt;
コンテナの中で、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; update&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; vim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これでvimが使えるようになるはず。&lt;&#x2F;p&gt;
&lt;p&gt;たまにnginxイメージとかのversionが古かったりすると、&lt;br &#x2F;&gt;
apt updateが失敗するときもあるので、&lt;br &#x2F;&gt;
その際は、下記の記事にようにしたら修正できました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;teriyakisan&#x2F;items&#x2F;e5cf7d5228dc02500562&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;teriyakisan&#x2F;items&#x2F;e5cf7d5228dc02500562&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、vimをインストールしたら、&lt;br &#x2F;&gt;
&#x2F;etc&#x2F;nginx&#x2F;conf.d&#x2F;default.conを開いて、下記の内容に修正します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;server {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    listen 443 ssl;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    server_name sample-nginx.com;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ssl_certificate &#x2F;etc&#x2F;ssl&#x2F;certs&#x2F;sample-nginx.crt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ssl_certificate_key &#x2F;etc&#x2F;ssl&#x2F;private&#x2F;sample-nginx.key;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    location &#x2F; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        root &#x2F;usr&#x2F;share&#x2F;nginx&#x2F;html;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        index index.html index.htm;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これが何をしているか、&lt;br &#x2F;&gt;
順に見ていきます。&lt;&#x2F;p&gt;
&lt;p&gt;まず、serverブロックですが、&lt;br &#x2F;&gt;
これはNginxの設定ファイルにおける基本的な構造であり、&lt;br &#x2F;&gt;
ここに特定のサーバーに関する設定を記述します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ブロックっていうものが何かというと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;特定の設定ディレクティブのグループを囲むための構文要素でで、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;これらを使用することで、Nginxの挙動を柔軟に制御し、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;特定のコンテキストや条件に基づいてさまざまな設定を適用できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ブロックは波括弧（{}）で囲まれたセクションです。&lt;br &#x2F;&gt;
ブロック内には複数のディレクティブが含まれることがあり、&lt;br &#x2F;&gt;
入れ子にすることも可能です。&lt;&#x2F;p&gt;
&lt;p&gt;たとえば、httpブロック内に複数のserverブロックを、&lt;br &#x2F;&gt;
serverブロック内に複数のlocationブロックをというふうに。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nginxnozhu-naburotukunozhong-lei&quot;&gt;Nginxの主なブロックの種類&lt;&#x2F;h4&gt;
&lt;h5 id=&quot;httpburotuku&quot;&gt;httpブロック&lt;&#x2F;h5&gt;
&lt;p&gt;Webサーバー全体の設定を定義するためのブロックです。&lt;br &#x2F;&gt;
ここには、リバースプロキシ設定、ロギング、MIMEタイプの定義など、&lt;br &#x2F;&gt;
すべてのサーバーインスタンスに共通する設定が含まれます。&lt;&#x2F;p&gt;
&lt;h5 id=&quot;serverburotuku&quot;&gt;serverブロック&lt;&#x2F;h5&gt;
&lt;p&gt;個別のWebサーバーまたは仮想ホストの設定を行うブロックです。&lt;br &#x2F;&gt;
ディレクティブでポートを指定し、server_nameでドメインを指定することで、&lt;br &#x2F;&gt;
特定のホストやポートへのリクエストに応じた設定を行います。&lt;&#x2F;p&gt;
&lt;h5 id=&quot;locationburotuku&quot;&gt;locationブロック&lt;&#x2F;h5&gt;
&lt;p&gt;特定のURLパス（例：&#x2F;images、&#x2F;apiなど）に適用される設定を定義します。&lt;br &#x2F;&gt;
これにより、異なるパスに異なる挙動（例えば、特定のパスへのアクセス制御やコンテンツの提供方法の変更）を設定できます。&lt;&#x2F;p&gt;
&lt;p&gt;いわゆる、一般的なエンドポイントはこのブロックで指定します&lt;&#x2F;p&gt;
&lt;h5 id=&quot;ifburotuku&quot;&gt;ifブロック&lt;&#x2F;h5&gt;
&lt;p&gt;条件に基づいて設定を適用する場合に使用しますが、ifディレクティブは使用に注意が必要です。&lt;br &#x2F;&gt;
なぜなら、特定の条件下でのみ実行される設定は、思わぬ挙動を引き起こすことがあるからです。&lt;&#x2F;p&gt;
&lt;h5 id=&quot;upstreamburotuku&quot;&gt;upstreamブロック&lt;&#x2F;h5&gt;
&lt;p&gt;ロードバランシングやリバースプロキシ設定で使用され、&lt;br &#x2F;&gt;
複数のサーバーアドレスをグループ化して管理します。&lt;br &#x2F;&gt;
RailsのPumaとかでのソケット通信などで使ったりしました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nginx&#x2F;bb4081a589fdd4708ba9353abc7b42b1-1024x563.png&quot; alt=&quot;プログラムの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、少し脱線してしまいましたが、&lt;br &#x2F;&gt;
&lt;strong&gt;先程のコードの説明に戻ります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;listen 443 sslはは、Nginxがリクエストを受け付けるポートを指定します。&lt;br &#x2F;&gt;
ここでは443ポートを使用しており、これはHTTPS通信の標準ポートです。&lt;br &#x2F;&gt;
sslキーワードは、このポートでSSL&#x2F;TLSを使用することを指示します。&lt;&#x2F;p&gt;
&lt;p&gt;server_name sample-nginx.comは、サーバーが応答すべきホスト名またはドメイン名を指定します。&lt;br &#x2F;&gt;
この例ではsample-nginx.comが使われています。&lt;&#x2F;p&gt;
&lt;p&gt;ssl_certificate と ssl_certificate_keyの２つは、&lt;br &#x2F;&gt;
ssl_certificateディレクティブは、SSL証明書のファイルの場所を指定します。&lt;br &#x2F;&gt;
ssl_certificate_keyディレクティブは、証明書に対応する秘密鍵のファイルの場所を指定します。&lt;br &#x2F;&gt;
これらはサーバーの身元を確認し、クライアントとの安全な通信を確立するために必要です。&lt;&#x2F;p&gt;
&lt;p&gt;rootディレクティブは、リクエストされたURIに対するファイルが保存されているサーバー上のディレクトリを指定します。&lt;br &#x2F;&gt;
indexディレクティブは、ディレクトリインデックスとして使用されるファイル名を指定します。&lt;&#x2F;p&gt;
&lt;p&gt;さて、これでsslの設定をしたので、&lt;br &#x2F;&gt;
次はhostファイルの設定をします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hosutohuairunobian-ji&quot;&gt;ホストファイルの編集&lt;&#x2F;h3&gt;
&lt;p&gt;本番環境とかであれば、&lt;br &#x2F;&gt;
面倒なDNS設定が必要ですが、&lt;br &#x2F;&gt;
開発環境なので、ホストファイルの編集だけで済ませてしまおうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;開発環境でsample-nginx.comというドメイン名でNginxの画面を表示するので、&lt;br &#x2F;&gt;
ローカル環境のホストファイルを編集して、sample-nginx.comをローカルIPアドレス（通常は127.0.0.1）にマッピングすることで、&lt;br &#x2F;&gt;
このドメイン名をローカルで解決できるようにしたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;設定ファイルは、macやlinuxなら&lt;br &#x2F;&gt;
&#x2F;etc&#x2F;hostsが該当します。&lt;&#x2F;p&gt;
&lt;p&gt;ファイルの末尾に、以下を追加します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;127.0.0.1    sample-nginx.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このあと、&lt;strong&gt;OSの再起動またはブラウザの再起動が場合によっては必要かもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;再起動後にhttps:&#x2F;&#x2F;sample-nginx.com&#x2F;にアクセスして、&lt;br &#x2F;&gt;
表示されればうまくいっています。&lt;br &#x2F;&gt;
自己署名証明書なので、ブラウザから警告が出ていると思いますが。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nginxwogeng-niji-merutameni&quot;&gt;Nginxを更に極めるために&lt;&#x2F;h2&gt;
&lt;p&gt;Nginxを更に極めるために、&lt;br &#x2F;&gt;
下記のような書籍はおすすめです。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;41EiT3WL0PL._SL500_.jpg&quot; alt=&quot;nginx実践入門 WEB+DB PRESS plus&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;nginx実践入門 WEB+DB PRESS plus&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B07JHJF3NQ&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;nginx%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%20WEB%2BDB%20PRESS%20plus&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;61STAmmcnvL._SL500_.jpg&quot; alt=&quot;nginx実践ガイド impress top gearシリーズ&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;nginx実践ガイド impress top gearシリーズ&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B01N183E3H&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;nginx%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20impress%20top%20gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;特に一冊目は、&lt;br &#x2F;&gt;
公式ドキュメントではなかなかわかりにくいところも&lt;br &#x2F;&gt;
広く解説しているので、おすすめです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Docker volume&#x2F;cp】ホストとコンテナのデータをマウントする</title>
        <published>2023-11-17T00:00:00+00:00</published>
        <updated>2023-11-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/docker-volume/"/>
        <id>https://reisuta.com/docker-volume/</id>
        
        <content type="html" xml:base="https://reisuta.com/docker-volume/">&lt;p&gt;Dockerを使用するにあたって、&lt;br &#x2F;&gt;
必ず直面するものとして、ホスト(自分のローカルPC)と&lt;br &#x2F;&gt;
コンテナのデータの共有及びそれらの永続化があると思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、それを実現する、Dockerの重要概念である、&lt;br &#x2F;&gt;
&lt;mark&gt;ボリュームとdocker cpなどの使用方法を主題にとりあげ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ボリュームの共有方法のマウントの種類や、docker cpとの違いにも言及しつつ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;具体例としてMySQLコンテナを使ってみます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事で得られるものとしては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;ボリュームマウントとバインドマウントの違い&lt;&#x2F;li&gt;
&lt;li&gt;docker cpの使い方とマウントと比べたデメリット&lt;&#x2F;li&gt;
&lt;li&gt;mysqlでのボリューム設定&lt;&#x2F;li&gt;
&lt;li&gt;ボリュームマウントのバックアップ方法と復元方法&lt;&#x2F;li&gt;
&lt;li&gt;docker desktop for macの特殊性&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;などがあります。&lt;&#x2F;p&gt;
&lt;p&gt;ボリュームは、Dockerを使う上で重要ですので、&lt;br &#x2F;&gt;
ぜひとも最後まで御覧くださいますと幸いです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;docker-cpkomando&quot;&gt;docker cpコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;まず、ボリュームの前に、&lt;br &#x2F;&gt;
docker cpコマンドについて触れていきます。&lt;&#x2F;p&gt;
&lt;p&gt;docker cp コマンドは、&lt;br &#x2F;&gt;
&lt;strong&gt;Dockerコンテナとホスト間でファイルやディレクトリをコピーする際に使用されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ホストは、自分のPCと思ってもらえれば大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、Vimや他のエディタがインストールされていないコンテナ内でファイルを編集したい場合、&lt;br &#x2F;&gt;
その環境にVimとかをインストールするやり方と、&lt;br &#x2F;&gt;
このdocker cpを使用してローカルマシンで編集したファイルを、&lt;br &#x2F;&gt;
コンテナにコピーするやり方があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cp index.txt mycontainer:&#x2F;tmp&#x2F;html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコードはindex.txtをローカルマシンから&lt;br &#x2F;&gt;
mycontainerの指定されたディレクトリ(ここでは&#x2F;tmp&#x2F;html)にコピーします。&lt;&#x2F;p&gt;
&lt;p&gt;Linuxにもcpコマンドがありますが、&lt;br &#x2F;&gt;
これがホストマシンからコンテナの中に変わっただけで、&lt;br &#x2F;&gt;
基本は似たような感じかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは、このあと紹介するvolumeを設定するまででもないような、&lt;br &#x2F;&gt;
軽微な変更とかをサクッと適用したいときとかに便利です。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;pushdkomando&quot;&gt;pushdコマンド&lt;&#x2F;h4&gt;
&lt;p&gt;やや脱線ですが、&lt;br &#x2F;&gt;
pushdコマンドというものがあり、これを使うと、&lt;br &#x2F;&gt;
ディレクトリのスタックに現在のディレクトリを保存し、&lt;br &#x2F;&gt;
新しいディレクトリに移動する際に使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;これはcdコマンドとは異なり、popdを使って前のディレクトリに戻ることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pushd &#x2F;path&#x2F;to&#x2F;newdirectory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 何らかの作業&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;popd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは新しいディレクトリに移動し、その後元のディレクトリに戻ります。&lt;&#x2F;p&gt;
&lt;p&gt;ぶっちゃけ、zoxideみたいなチートコマンドもあるので、&lt;br &#x2F;&gt;
これをピンポイントで使う機会はあまりないかもしれませんが、&lt;br &#x2F;&gt;
docker cpとかをする際のディレクトリのパス指定に、&lt;br &#x2F;&gt;
カレントディレクトリを変えたほうが便利な場合もあるかもしれませんので、&lt;br &#x2F;&gt;
軽くこういうコマンドもあるんだなぐらいで押さえておくのがおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、zoxideみたいな便利コマンドについては、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;useful-command&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;でご紹介しております。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;docker-cpdezuo-cheng-sitadetagashi-wareruchang-he&quot;&gt;docker cpで作成したデータが失われる場合&lt;&#x2F;h3&gt;
&lt;p&gt;さて、こんな感じでdocker cpをしたデータですが、&lt;br &#x2F;&gt;
永続化されるわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerでは、コンテナ内のデータは&lt;br &#x2F;&gt;
コンテナのライフサイクルに依存します。&lt;br &#x2F;&gt;
コンテナのライフサイクルについては、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-command&#x2F;&quot;&gt;下記の記事&lt;&#x2F;a&gt;で少し言及しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1208&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;さて、docker cpで作成したデータですが、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;ポイント&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#FFD54F&quot; bordercolor=&quot;#FFD54F&quot; bgcolor=&quot;#FFFDE7&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;コンテナを停止して再開した場合、データは保持されます。&lt;&#x2F;li&gt;
&lt;li&gt;コンテナをrestartした場合も、基本的にはデータは保持されます。&lt;&#x2F;li&gt;
&lt;li&gt;しかし、&lt;strong&gt;コンテナを破棄して再起動した場合、新しいコンテナIDが生成されるため、&lt;br &#x2F;&gt;
以前のコンテナで作成されたデータは失われます。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;そのため、docker cpをするだけでは、&lt;br &#x2F;&gt;
ファイルの内容を永続化するという観点では不十分です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、このようにファイルの内容とかを永続化する際は、&lt;br &#x2F;&gt;
&lt;strong&gt;Dockerのボリュームという概念を用います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ボリュームには、大きく分けてボリュームマウントとバインドマウントを利用します。(これは後ほど詳しく解説します)&lt;br &#x2F;&gt;
これにより、コンテナが削除されてもデータはホストシステム上に残すことができます。&lt;br &#x2F;&gt;
コマンドの形式としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;path&#x2F;on&#x2F;host:&#x2F;path&#x2F;in&#x2F;container myimage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じで、こちらはバインドマウントの場合です。&lt;&#x2F;p&gt;
&lt;p&gt;このコードは、ホストの&#x2F;path&#x2F;on&#x2F;hostをコンテナの&#x2F;path&#x2F;in&#x2F;containerにマウントし、&lt;br &#x2F;&gt;
コンテナのデータをホストの指定したディレクトリに永続化します。&lt;&#x2F;p&gt;
&lt;p&gt;以下、ボリュームについて詳しく見ていきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;boriyumutoha&quot;&gt;ボリュームとは&lt;&#x2F;h2&gt;
&lt;p&gt;ボリュームは、コンテナ間でデータを共有し、永続化するためのメカニズムです。&lt;br &#x2F;&gt;
これにより、コンテナが削除された後もデータを保持できます。&lt;&#x2F;p&gt;
&lt;p&gt;先程の、docker cpでもホストとコンテナでデータを同期できる点で、&lt;br &#x2F;&gt;
似てはいますが、下記の点で異なります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;リアルタイム動機(ボリュームは開発環境などでの編集がコンテナにも反映される。docker cpは実行時のみ)&lt;&#x2F;li&gt;
&lt;li&gt;ボリュームマウントを使えば、複数の異なるコンテナ間でのボリュームの共有ができる&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;そのため、ユースケースとしては、&lt;br &#x2F;&gt;
docker cpがログファイルなどの取り出しなどに使うのに対し、&lt;br &#x2F;&gt;
開発環境などでの編集はバインドマウントなど用いられることが多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;マウントっていうのは、ストレージデバイスやファイルシステムをアクセス可能な形でシステムに取り付けることで、&lt;br &#x2F;&gt;
Dockerでは、&lt;strong&gt;ボリュームをコンテナの特定のパスにマウントすることで、データをコンテナにアクセス可能にします。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;これにより、コンテナが破棄されてもデータを保持することができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;マウントの種類としてボリュームマウントとバインドマウントが有名です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;baindomauntotoboriyumumauntonowei-i&quot;&gt;バインドマウントとボリュームマウントの違い&lt;&#x2F;h3&gt;
&lt;p&gt;バインドマウントは、ホストマシン上の任意のファイルやディレクトリをコンテナにマウントします。&lt;br &#x2F;&gt;
これは開発環境でのファイルの共有に便利です。先述しましたが、&lt;br &#x2F;&gt;
ホストとコンテナとの共有という意味では、docker cpと共通点がありますね。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、ボリュームマウントは、Dockerが管理する特定の場所にデータを格納します。&lt;br &#x2F;&gt;
これは、本番環境でのデータの永続化に適していて、docker volume createコマンドなどで、&lt;br &#x2F;&gt;
ボリュームを作成します。&lt;&#x2F;p&gt;
&lt;p&gt;実際にdocker composeなど、実務で使う頻度が多いマウントは、&lt;br &#x2F;&gt;
どちらかというとボリュームマウントのような気がします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;boriyumumauntonoli-dian&quot;&gt;ボリュームマウントの利点&lt;&#x2F;h3&gt;
&lt;p&gt;ボリュームマウントは、特にデータベースのデータなど、&lt;br &#x2F;&gt;
継続的に更新されるデータの保持に有効です。&lt;&#x2F;p&gt;
&lt;p&gt;これにより、コンテナが削除されてもデータは失われません。&lt;&#x2F;p&gt;
&lt;p&gt;dockerには、こうしたvolumeを操作するコマンドがあります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;docker-volumekomando&quot;&gt;docker volumeコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;docker volume コマンドは、&lt;br &#x2F;&gt;
ボリュームの作成、管理、削除を行うために使用されます。&lt;&#x2F;p&gt;
&lt;p&gt;先程ちらっと出てきたvolumeの作成には、createを使います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; volume create myvolume&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドはmyvolumeという新しいボリュームを作成します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-volume-ls&quot;&gt;docker volume ls&lt;&#x2F;h3&gt;
&lt;p&gt;docker volume ls コマンドを使用すると、現在存在するすべてのボリュームの一覧が表示されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-volume&#x2F;Screenshot-2023-11-17-at-7.10.30.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ここにDRIVERっていう項目があるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは、データのストレージ方式を管理するためのプラグインです。&lt;br &#x2F;&gt;
これにより、異なるタイプのストレージシステムに対応し、データを効率的に管理できるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトは、localで、&lt;br &#x2F;&gt;
これは、ローカルファイルシステムにデータを保存します。&lt;br &#x2F;&gt;
他の種類として、overlayやaufsなどもありますが、&lt;br &#x2F;&gt;
やや高度になるのと、あまりvolumeのdriverを設定することは、&lt;br &#x2F;&gt;
そこまでない気がするので割愛します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ややこしいのですが、&lt;br &#x2F;&gt;
dockerのストレージドライバーとは微妙に違う概念で、&lt;br &#x2F;&gt;
あくまでvolumeの保存作成などの形式かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ストレージドライバーについては、&lt;br &#x2F;&gt;
下記の記事が詳しかったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;storage&#x2F;storagedriver&#x2F;index.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;storage&#x2F;storagedriver&#x2F;index.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mountopusiyon&quot;&gt;--mountオプション&lt;&#x2F;h3&gt;
&lt;p&gt;docker runとかで、&lt;br &#x2F;&gt;
コンテナを起動する際、&lt;br &#x2F;&gt;
volumeについてのオプションは、&lt;br &#x2F;&gt;
-vで設定することが多いかもしれませんが、&lt;br &#x2F;&gt;
これ以外に--mountオプションというものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;--mountオプションは、ボリュームマウントの詳細な設定を行う際に使用されます。&lt;br &#x2F;&gt;
&lt;strong&gt;-vオプションと比較すると、--mountはより詳細な設定が可能です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--mount type=TYPE,source=SOURCE,destination=DESTINATION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;typeは、マウントのタイプを指定します。&lt;br &#x2F;&gt;
通常はvolume（ボリュームマウント）、bind（ホストシステム上のファイルまたはディレクトリをコンテナにマウント）、&lt;br &#x2F;&gt;
tmpfs（一時的なファイルストレージ）のいずれかを指定します。&lt;&#x2F;p&gt;
&lt;p&gt;sourceは、マウントするソース（ボリューム名、ファイルまたはディレクトリのパス）を指定します。&lt;br &#x2F;&gt;
typeがvolumeの場合、これはボリュームの名前です。&lt;br &#x2F;&gt;
typeがbindの場合、これはホスト上のファイルまたはディレクトリの絶対パスです。&lt;&#x2F;p&gt;
&lt;p&gt;destinationは、コンテナ内のマウントポイント（パス）を指定します。&lt;br &#x2F;&gt;
例えば、myvolumeという名前のボリュームをコンテナの&#x2F;appディレクトリにマウントする場合、&lt;br &#x2F;&gt;
以下のようにdocker runコマンドに--mountオプションを追加します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --mount&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; type=volume,source=myvolume,destination=&#x2F;app myimage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;--mountのほうが、詳細にvolume設定したい際は、&lt;br &#x2F;&gt;
適しているかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;また-vでやった場合、&lt;br &#x2F;&gt;
ボリュームマウントなのか、バインドマウントなのかわかりにくいという側面があるので、&lt;br &#x2F;&gt;
可読性の観点でも、もしかすると--mountオプションの方がいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、-vオプションは、&lt;br &#x2F;&gt;
マウント元が &#x2F; から始まる絶対パスのときは、&lt;br &#x2F;&gt;
バインドマウント、そうでないときはボリュームマウントとなります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tmpfsmaunto&quot;&gt;tmpfsマウント&lt;&#x2F;h3&gt;
&lt;p&gt;今まで、ボリュームマウントとバインドマウントを中心に解説しましたが、&lt;br &#x2F;&gt;
tmpfsマウントというものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;tmpfsマウントは、一時的なファイルストレージとして利用され、&lt;br &#x2F;&gt;
コンテナの再起動時にはデータが失われます。これは、一時ファイルやキャッシュに適しています。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にはコンテナのライフサイクルに依存するので、&lt;br &#x2F;&gt;
他のボリュームマウントとかみたいに、&lt;br &#x2F;&gt;
データの永続化という点では向いていません。&lt;&#x2F;p&gt;
&lt;p&gt;セッションデータなどの一時的なデータの保存が適している点で、&lt;br &#x2F;&gt;
NoSQLとかに少し役割が似ているかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;実際に、tmpfsマウントは、メモリ上でデータを処理するため、&lt;br &#x2F;&gt;
ディスクベースのストレージよりも高速です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d --name tmpfs-container --tmpfs &#x2F;tmpfs-dir:rw,size=100m myimage&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドは、myimageを基にtmpfs-containerというコンテナを起動し、&lt;br &#x2F;&gt;
その中に&#x2F;tmpfs-dirというディレクトリをtmpfsマウントとして作成します。&lt;br &#x2F;&gt;
ここで指定されたsize=100mは、tmpfsマウントに割り当てるメモリのサイズを指定しています。&lt;br &#x2F;&gt;
rwは読み書き可能っていうことですね。&lt;&#x2F;p&gt;
&lt;p&gt;中身は、コンテナの中に入って確認できる。&lt;br &#x2F;&gt;
試しに何かフィアルを&#x2F;tmpfs-dir配下で作ったあと、&lt;br &#x2F;&gt;
restartをすると、&lt;br &#x2F;&gt;
消えていることがわかると思います。&lt;&#x2F;p&gt;
&lt;p&gt;正直、頻繁には使うものではない気もしますが、&lt;br &#x2F;&gt;
マウントの種類としては覚えておくといいかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-volume-inspect&quot;&gt;docker volume inspect&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;mark&gt;docker volume inspect コマンドは、特定のボリュームの詳細情報を提供します。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;このコマンドは、ボリュームの設定や状態を確認するのに非常に便利です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;▒▓&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    ~ docker volume inspect mysql-volume&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;CreatedAt&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;2023-11-17T07:09:35+09:00&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Driver&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;local&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Labels&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: null,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Mountpoint&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;mysql-volume&#x2F;_data&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;mysql-volume&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Options&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: null,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        &amp;quot;Scope&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;local&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このコマンドはmysql-volume(後のハンズオンで作成するやつ)の詳細情報を表示します。&lt;br &#x2F;&gt;
&lt;strong&gt;特に注目したいのが、Mountpointです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ボリュームのデータが物理的に保存されているホストシステム上(自分のPC)のパスを示します。&lt;br &#x2F;&gt;
この例では &#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;mysql-volume&#x2F;_data にデータが保存されています。&lt;br &#x2F;&gt;
(後に少し触れますが、docker desttop for macとかだと、&lt;br &#x2F;&gt;
ホストPCでこのパスを確認しても実体が存在しないかと思います。)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mysqlkontenawoyong-itaboriyumumauntoshi-zhuang&quot;&gt;MySqlコンテナを用いたボリュームマウント実装&lt;&#x2F;h2&gt;
&lt;p&gt;ボリュームやマウントについて&lt;br &#x2F;&gt;
大まかには紹介できたと思うので、&lt;br &#x2F;&gt;
試しにmysqlコンテナを使って実装してみます。&lt;&#x2F;p&gt;
&lt;p&gt;MySQLコンテナでデータベースのデータを永続化する手順は、&lt;br &#x2F;&gt;
下記のような感じになるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;マウントディレクトリの指定: &#x2F;var&#x2F;lib&#x2F;mysql&lt;&#x2F;li&gt;
&lt;li&gt;環境変数の設定: 例えばMYSQL_ROOT_PASSWORDを設定します。&lt;&#x2F;li&gt;
&lt;li&gt;ボリュームの作成: docker volume createコマンドを使用してボリュームを作成します。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;p&gt;これを踏まえて、コンテナを立ち上げてみます。&lt;br &#x2F;&gt;
例によっていきなりrunで立ち上げるので、&lt;br &#x2F;&gt;
pullとかは不要です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;  -e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; MYSQL_ROOT_PASSWORD=mypassword&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;  -v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mysql-volume:&#x2F;var&#x2F;lib&#x2F;mysql&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  mysql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;早速、コンテナの中に入って見ましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker exec -it コンテナID &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コンテナの中で、mysql -pコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mysql&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そうすると、パスワードを聞かれるので、&lt;br &#x2F;&gt;
最初のrunで指定したパスワード入れます。&lt;&#x2F;p&gt;
&lt;p&gt;mysqlに入れたら、DATABASEを作りましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;CREATE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; DATABASE volumetest&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;作成したら、テーブルの挿入からデータの作成まで次のような感じで行います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; volumetest&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;create&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; table blog&lt;&#x2F;span&gt;&lt;span&gt; (id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; INT NOT NULL AUTO_INCREMENT, title VARCHAR&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;50&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;, PRIMARY KEY&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;insert&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; into blog&lt;&#x2F;span&gt;&lt;span&gt; (title) values (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、データを挿入できたら、&lt;br &#x2F;&gt;
中身を確認してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mysql&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; select&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; from blog&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; title&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; row in set&lt;&#x2F;span&gt;&lt;span&gt; (0.00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; sec&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;selectしてみると、こんな感じで&lt;br &#x2F;&gt;
データを入れることができていることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;用は済んだので、&lt;br &#x2F;&gt;
ctrl + Dとかで抜けましょう。&lt;&#x2F;p&gt;
&lt;p&gt;試しにstopとrmをして、&lt;br &#x2F;&gt;
このmysqlコンテナを消してみましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker stop コンテナID&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker rm コンテナID&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そして、もう一度立ち上げてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -d \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -e MYSQL_ROOT_PASSWORD=mypassword \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  -v mysql-volume:&#x2F;var&#x2F;lib&#x2F;mysql \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  mysql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;先程と同じ作業をして、&lt;br &#x2F;&gt;
このコンテナのmysqlでselect文を実行してみると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mysql&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; select&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; from blog&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; title&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;+----+-------+&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; row in set&lt;&#x2F;span&gt;&lt;span&gt; (0.00&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; sec&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;さっきと同じデータがあることがわかりますね。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ちなみに、コンテナIDが変わっていたかと思うので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;先程とは別のコンテナになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;volumeを使うことで、&lt;br &#x2F;&gt;
このようにデータの共有ができるということですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、最初に指定した、&lt;br &#x2F;&gt;
volumeのマウントポイントですが、&lt;br &#x2F;&gt;
docker desktop for macとかを使っていると、&lt;br &#x2F;&gt;
これらが仮想化を使っている関係でファイルパスをホストPCから&lt;br &#x2F;&gt;
直接見ることができません。&lt;&#x2F;p&gt;
&lt;p&gt;これを見る方法としては、&lt;br &#x2F;&gt;
nsenterというものを使うのですが、&lt;br &#x2F;&gt;
docker入門の枠からは外れるので割愛します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、nsenterで確認すると、&lt;br &#x2F;&gt;
&#x2F;var&#x2F;lib&#x2F;docker&#x2F;volumes&#x2F;mysql-volume&#x2F;_data&#x2F;volumetest&#x2F;blob.ibdというファイルが作成されていることが&lt;br &#x2F;&gt;
確認できました。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;boriyumumauntonobatukuatupufang-fa&quot;&gt;ボリュームマウントのバックアップ方法&lt;&#x2F;h2&gt;
&lt;p&gt;次にこうしたボリュームのバックアップについて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerでは、バックアップのために別のコンテナを使用することができます。&lt;br &#x2F;&gt;
これにより、重要なデータを安全に保管し、必要に応じて復元することが可能になります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;busyboxtotarwoyong-itamysql-volumenobatukuatupufang-fa&quot;&gt;busyboxとtarを用いたmysql-volumeのバックアップ方法&lt;&#x2F;h3&gt;
&lt;p&gt;すでに作成したmysql-volumeを試しにバックアップしてみましょう。&lt;&#x2F;p&gt;
&lt;p&gt;データの整合性を保つ観点のため、&lt;br &#x2F;&gt;
できれば、バックアップするボリュームを使用しているコンテナを停止しておきましょう。&lt;br &#x2F;&gt;
これは docker stopでできます。&lt;&#x2F;p&gt;
&lt;p&gt;次に、下記のようなコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --rm -v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mysql-volume:&#x2F;src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;span&gt; $(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;pwd&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;:&#x2F;backup busybox tar cvf &#x2F;backup&#x2F;backup.tar&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;src .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;-v mysql-volume:&#x2F;srcは、ボリュームマウントの指定です。&lt;br &#x2F;&gt;
mysql-volume（バックアップしたい Docker ボリュームの名前）をコンテナ内の &#x2F;src ディレクトリにマウントします。&lt;br &#x2F;&gt;
これにより、コンテナ内からボリュームのデータにアクセスできるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;-v $(pwd):&#x2F;backupは、これもボリュームマウントの指定ですが、&lt;br &#x2F;&gt;
こちらはホストシステムの現在のディレクトリ（$(pwd) ）を、&lt;br &#x2F;&gt;
コンテナ内の &#x2F;backup ディレクトリにマウントします。バックアップデータはここに保存されます。&lt;&#x2F;p&gt;
&lt;p&gt;busyboxは、多くの標準的な UNIX ユーティリティを含む軽量のイメージで、&lt;br &#x2F;&gt;
ここでは tar コマンドの実行に使用されます。tarを実行したいだけなので、&lt;br &#x2F;&gt;
&lt;strong&gt;ぶっちゃけ、busyboxじゃなくても、ubuntuでもcentosでも&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;tarが叩ければ何でもいいです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;tar cvf &#x2F;backup&#x2F;backup.tar -C &#x2F;src . は、コンテナ内で実行されるコマンドです。&lt;br &#x2F;&gt;
tar コマンドを使って &#x2F;src（mysql-volume がマウントされたディレクトリ）の内容を、&lt;br &#x2F;&gt;
&#x2F;backup&#x2F;backup.tar にアーカイブします。&lt;br &#x2F;&gt;
-C &#x2F;src オプションは tar に &#x2F;src ディレクトリに移動してからアーカイブを作成するよう指示し、&lt;br &#x2F;&gt;
. は現在のディレクトリ（ここでは &#x2F;src）の全てのファイルとディレクトリを意味します。&lt;&#x2F;p&gt;
&lt;p&gt;結果として、このコマンドは mysql-volume の内容をバックアップして、ホ&lt;br &#x2F;&gt;
ストシステムの現在のディレクトリに backup.tar という名前のアーカイブファイルとして保存します。&lt;br &#x2F;&gt;
バックアップが完了した後、使用したコンテナは自動的に削除されます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これはLinuxとかならうまくいくはずですが、&lt;br &#x2F;&gt;
docker desktop for macのような仮想化を使った環境だと、&lt;br &#x2F;&gt;
カレントディレクトリにファイルが作られない模様。&lt;&#x2F;p&gt;
&lt;p&gt;先程のvolumeの中身にnsenterを使ったような、&lt;br &#x2F;&gt;
別のアプローチが必要になるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そもそもdocker desktop for macとかなら、&lt;br &#x2F;&gt;
&lt;strong&gt;アプリの拡張機能とかで、GUIでバックアップ作成できるっぽいので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そもそもコマンドでやる必要ないのかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;ja-jp&#x2F;blog&#x2F;back-up-and-share-docker-volumes-with-this-extension&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.docker.com&#x2F;ja-jp&#x2F;blog&#x2F;back-up-and-share-docker-volumes-with-this-extension&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私は、docker desktop for macではなく、&lt;br &#x2F;&gt;
OrbStackというものを使っているので、&lt;br &#x2F;&gt;
もう少しコマンドでなんとかできないものか調査してみようと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;boriyumunofu-yuan-risutoa-fang-fa&quot;&gt;ボリュームの復元(リストア)方法&lt;&#x2F;h4&gt;
&lt;p&gt;ボリュームのデータを復元するには、&lt;br &#x2F;&gt;
基本的に新しいvolumeを作成して、&lt;br &#x2F;&gt;
先程のバックアップとパスが逆向きのtarコマンドを実行すれば復元できるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;新しいvolumeを作成するには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker volume create new-volume-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とします。&lt;&#x2F;p&gt;
&lt;p&gt;次にバックアップファイルの配置です。&lt;br &#x2F;&gt;
復元するバックアップファイル（例えばtarアーカイブ）が、&lt;br &#x2F;&gt;
ホストシステム上のアクセス可能な場所にあることを確認します。&lt;br &#x2F;&gt;
(docker desktop for macとかだとそもそもここがうまく行っていないので、&lt;br &#x2F;&gt;
あくまでlinuxとかの話になります)&lt;&#x2F;p&gt;
&lt;p&gt;そしたら、バックアップデータを新しく作成したボリュームに抽出します。&lt;br &#x2F;&gt;
一時的なコンテナを作成し、バックアップファイルをマウントして、新しいボリュームにデータを抽出するコマンドを実行します&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run --rm -v new-volume-name:&#x2F;target -v &#x2F;path&#x2F;to&#x2F;backup:&#x2F;backup busybox tar xvf &#x2F;backup&#x2F;backup.tar -C &#x2F;target&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;新しいボリュームにデータが正しく復元されたことを確認します。&lt;br &#x2F;&gt;
必要に応じて新しいボリュームを使用するコンテナを起動し、データを確認します。&lt;&#x2F;p&gt;
&lt;p&gt;また復元の手段としては、volumes-fromなどもあります。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;51bj0LcD-YL._SL500_.jpg&quot; alt=&quot;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B089VZXX63&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;%E3%81%95%E3%82%8F%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%80%80docker%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;513ecNqK+7L._SL500_.jpg&quot; alt=&quot;Docker実践ガイド 第2版 impress top gearシリーズ&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Docker実践ガイド 第2版 impress top gearシリーズ&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;dp&amp;#x2F;B07NDT526Q&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;search.rakuten.co.jp&amp;#x2F;search&amp;#x2F;mall&amp;#x2F;Docker%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20%E7%AC%AC2%E7%89%88%20impress%20top%20gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【プログラマー不要論】ChatGPT GPTsとソフトウェアエンジニアの将来</title>
        <published>2023-11-13T00:00:00+00:00</published>
        <updated>2023-11-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/chatgpt_gpts/"/>
        <id>https://reisuta.com/chatgpt_gpts/</id>
        
        <content type="html" xml:base="https://reisuta.com/chatgpt_gpts/">&lt;h2 id=&quot;chatgpttoha&quot;&gt;ChatGPTとは&lt;&#x2F;h2&gt;
&lt;p&gt;まあめちゃくちゃ今更なので、&lt;br &#x2F;&gt;
知っているよっていう人がほとんどだと思いますが、&lt;br &#x2F;&gt;
ChatGPTは、OpenAIによって開発された、自然言語処理を行う高度なAIシステムのことです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;chat.openai.com&#x2F;auth&#x2F;login&quot;&gt;https:&#x2F;&#x2F;chat.openai.com&#x2F;auth&#x2F;login&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPT自体はだいぶ前にかなり話題になっているので、&lt;br &#x2F;&gt;
知らないっていう人はかなり少ないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;以前の&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chatgpt&#x2F;&quot;&gt;私の記事でChatGPTのapiとずんだもんとVue.js&lt;&#x2F;a&gt;を使った、&lt;br &#x2F;&gt;
ちょっとしたデモをあげているので興味がある人はどうぞ。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;519&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;かなり革新的なツールなので、&lt;br &#x2F;&gt;
現在、話題になっている技術ですね。&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPT自体については、&lt;br &#x2F;&gt;
私も下記のようなポストをしていたりと、&lt;br &#x2F;&gt;
何かと気になってはいました。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1718125649301569792?s=20&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1718125649301569792&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPTは、何かと荒れやすい話題で、&lt;br &#x2F;&gt;
エンジニアの中でも懐疑的な人と、&lt;br &#x2F;&gt;
肯定的な人で結構二極化している印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;私は、&lt;strong&gt;上記のようなポストでも分かる通り、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;どちらかというと懐疑的でした&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、今回のGPTsの報道を見て、&lt;br &#x2F;&gt;
ちょっと考えを見直したというのはあります。(それでも全面肯定派ではありませんが)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gptstoha&quot;&gt;GPTsとは&lt;&#x2F;h2&gt;
&lt;p&gt;さて、そんなChatGPTですが、&lt;br &#x2F;&gt;
先日のテックカンファレンス(OpenAI DevDay)で、&lt;br &#x2F;&gt;
GPTsなるものが発表された模様です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;openai.com&#x2F;blog&#x2F;introducing-gpts&quot;&gt;https:&#x2F;&#x2F;openai.com&#x2F;blog&#x2F;introducing-gpts&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これがかなり革命的で、&lt;br &#x2F;&gt;
ものすごく話題になっています。&lt;&#x2F;p&gt;
&lt;p&gt;以下、詳細に見ていきましょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kasutamugptgaqiang-li&quot;&gt;カスタムGPTが強力&lt;&#x2F;h3&gt;
&lt;p&gt;GPTsは、めちゃくちゃ平たく言うと、&lt;br &#x2F;&gt;
自分でカスタムGPTが作れる機能で、&lt;br &#x2F;&gt;
有料会員だけが使える機能です。&lt;&#x2F;p&gt;
&lt;p&gt;今までは、&lt;br &#x2F;&gt;
「あなたはWebマーケの担当者とする。...」みたいに、&lt;br &#x2F;&gt;
毎度毎度条件とかを詳細に指示する必要があって、&lt;br &#x2F;&gt;
それを使いまわしたりとかがしづらかったと思うのですが、&lt;br &#x2F;&gt;
&lt;mark&gt;このカスタムGPTで、それぞれのコンテキストで&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;詳細なGPTを作ることができるという感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;面白い例を見つけたので、&lt;br &#x2F;&gt;
張っておきます&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;note.com&#x2F;hanagasa_manya&#x2F;n&#x2F;na3c75122463d&quot;&gt;https:&#x2F;&#x2F;note.com&#x2F;hanagasa_manya&#x2F;n&#x2F;na3c75122463d&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これによって、&lt;br &#x2F;&gt;
例えば、「記事生成bot」、&lt;br &#x2F;&gt;
「おすすめタイトル提案bot」みたいに、&lt;br &#x2F;&gt;
用途に応じて様々なカスタムGPTを使えるようになりました。&lt;&#x2F;p&gt;
&lt;p&gt;そして、これだけではなく、&lt;br &#x2F;&gt;
今後は、こうして個人が作成したカスタムGPTは、&lt;br &#x2F;&gt;
市場(apple storeのようなものらしい)に公開して、&lt;br &#x2F;&gt;
収益化とかもできるようになるんだとか。&lt;&#x2F;p&gt;
&lt;p&gt;いやはや、色々新時代過ぎて、&lt;br &#x2F;&gt;
なかなか脳みそがついていきません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gpt-builder&quot;&gt;GPT Builder&lt;&#x2F;h3&gt;
&lt;p&gt;そして、今回、&lt;br &#x2F;&gt;
GPT Builderなるものが搭載されました。&lt;&#x2F;p&gt;
&lt;p&gt;これは、先程のカスタムGPTを&lt;br &#x2F;&gt;
対話的に作成することができるものです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chatgpt_gpts&#x2F;Screenshot-2023-11-12-at-17.57.33-1024x590.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これによって、&lt;br &#x2F;&gt;
ChatGPTの使い方がよくわからんって言う人でも、&lt;br &#x2F;&gt;
対話的に「Web記事自動生成botみたいなの作って」みたいに、&lt;br &#x2F;&gt;
気軽に入力して進めていくだけで、&lt;br &#x2F;&gt;
カスタムGPTを作れてしまうという手軽さ。&lt;&#x2F;p&gt;
&lt;p&gt;あまりに、手軽なので、&lt;br &#x2F;&gt;
ノーコードでできてしまうと話題になっています。&lt;&#x2F;p&gt;
&lt;p&gt;たしかに、&lt;mark&gt;botとかは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ノーコードで作るのは難しかったので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;それがプログラミングなしで作れるという意味では、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ノーコードとも言えそうです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、外部APIとの連携とかは、&lt;br &#x2F;&gt;
プログラミングの知識がある程度必要ですし、&lt;br &#x2F;&gt;
ChatGPTが生成したコードとかは、&lt;br &#x2F;&gt;
読める必要がある場面も出てくると思うので、&lt;br &#x2F;&gt;
そういう意味では、あまり従来のChatGPTと変わらないのではという気もします。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enzinianoshi-shi-nowei-lai&quot;&gt;エンジニアの仕事の未来&lt;&#x2F;h2&gt;
&lt;p&gt;さて、GPTsの台頭ですが、&lt;br &#x2F;&gt;
これは今まで騒がれていた、&lt;br &#x2F;&gt;
プログラマーは不要になるのでは？という議論を&lt;br &#x2F;&gt;
彷彿とさせるものがあると感じました。&lt;&#x2F;p&gt;
&lt;p&gt;実際どうなのでしょう。&lt;br &#x2F;&gt;
もちろん、確定したことは何もわかりませんが、&lt;br &#x2F;&gt;
私なりの見解をあげてみたいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jin-sugunihashi-shi-ganakunaranai&quot;&gt;今すぐには仕事がなくならない&lt;&#x2F;h3&gt;
&lt;p&gt;まず、現状だと、&lt;br &#x2F;&gt;
&lt;strong&gt;「今すぐ」には仕事はなくならないと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;「今すぐ」を定義するのも正直難しいのですが、&lt;br &#x2F;&gt;
少なくとも向こう2年ぐらいは...&lt;&#x2F;p&gt;
&lt;p&gt;というのも、まだ現状のChatGPTだと、&lt;br &#x2F;&gt;
正確性に欠けることが多く、&lt;br &#x2F;&gt;
&lt;mark&gt;基本的に人の目でコードの正確さを判断する必要があるからです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;AIの進化により、一部の繰り返し作業は自動化される可能性がありますが、&lt;br &#x2F;&gt;
創造性や複雑な問題解決を必要とする作業はエンジニアの手に残りそうな気がします。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そうは言っても、&lt;br &#x2F;&gt;
それもいつまでの話かは正直読めないぐらい、&lt;br &#x2F;&gt;
進化が凄まじいなとは思うので、&lt;br &#x2F;&gt;
動向は追っていく必要はあるかと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gao-du-nasukirunozhong-yao-xing&quot;&gt;高度なスキルの重要性&lt;&#x2F;h3&gt;
&lt;p&gt;AIの台頭により、高度な技術を要する作業の重要性が増している気がします。&lt;br &#x2F;&gt;
具体的には、&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;設計、アーキテクチャの検討、技術選定など&lt;&#x2F;li&gt;
&lt;li&gt;アルゴリズム開発とか最適化&lt;&#x2F;li&gt;
&lt;li&gt;機械学習とAIの研究開発&lt;&#x2F;li&gt;
&lt;li&gt;ユーザーエクスペリエンス（UX）&#x2F;ユーザーインターフェース（UI）設計&lt;&#x2F;li&gt;
&lt;li&gt;セキュリティと暗号化&lt;&#x2F;li&gt;
&lt;li&gt;プロジェクト管理とリード&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;平たく言うと、ただコードを書く、&lt;br &#x2F;&gt;
コーダーみたいな人は、&lt;br &#x2F;&gt;
淘汰される危険性が高いという感じかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPTは、&lt;br &#x2F;&gt;
AtCoderのABC、C問題ぐらいならパスできるようなコードを&lt;br &#x2F;&gt;
即座に書いてしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1723330512692125756?s=20&lt;&#x2F;p&gt;
&lt;p&gt;コーディング能力があるだけではだめで、&lt;br &#x2F;&gt;
設計、アーキテクチャといった、&lt;br &#x2F;&gt;
よりマクロな視点でシステム開発を捉えられる様になる必要がありそうです。&lt;&#x2F;p&gt;
&lt;p&gt;所謂、エンジニアのキャリアとして、&lt;br &#x2F;&gt;
技術のスペシャリストを目指すというキャリアよりは、&lt;br &#x2F;&gt;
マネジメント能力がある方のキャリアを目指した方が、&lt;br &#x2F;&gt;
安全性は高そうな気はします。&lt;&#x2F;p&gt;
&lt;p&gt;本当に技術が好きで、それだけやっていきたいという人は、&lt;br &#x2F;&gt;
ChatGPTに取って代わられる危険性がないわけじゃないので、&lt;br &#x2F;&gt;
ChatGPTの台頭は、純粋にコーディングが好きな人にとっては、&lt;br &#x2F;&gt;
正直あまり嬉しくないニュースかもしれませんね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、本当にエンジニアが淘汰されるのかという点に関しては、&lt;br &#x2F;&gt;
正直まだ懐疑的ではあります。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、上記を踏まえて高度なスキルを持ったエンジニアが、&lt;br &#x2F;&gt;
一体どれぐらい市場にいるのかということを考えたら、&lt;br &#x2F;&gt;
かなりの数のエンジニアが職を失うことになりそうです。&lt;&#x2F;p&gt;
&lt;p&gt;それだけ雇用が失われて、&lt;br &#x2F;&gt;
別の雇用があるのかというと、&lt;br &#x2F;&gt;
エンジニアですら、雇用がなくなるようなころには、&lt;br &#x2F;&gt;
他の職業も少なからず淘汰されている可能性が高いですから、&lt;br &#x2F;&gt;
そもそも社会構造的に成り立つのか？みたいな疑問もあります。&lt;&#x2F;p&gt;
&lt;p&gt;それと、現在PCが使える人使えない人みたいなIT格差があり、&lt;br &#x2F;&gt;
地方とかでは未だに紙とかで在庫管理しているような企業もあったりすることを思うと、&lt;br &#x2F;&gt;
個人的には情報格差の種類が増えていくというのが、&lt;br &#x2F;&gt;
より現実的なような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;それと、&lt;strong&gt;そもそもAIは職を奪うのではなく、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;人間の楽をするためのツールという捉え方もあるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;心配するほど、人間の雇用は現象しないのかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;今後少子化で間違いなく労働人口自体は減るので、&lt;br &#x2F;&gt;
むしろ、AIが補助をしてくれるぐらいで&lt;br &#x2F;&gt;
ちょうどよくなるのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;それに我々が生きている間に、&lt;br &#x2F;&gt;
完全プログラミング(人間不要ですべてAIがプログラミングする)の時代が&lt;br &#x2F;&gt;
到来するかも未知数なので、&lt;br &#x2F;&gt;
起きるかどうかもわからないことを考えても仕方ないっていうのもあります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;aiwohuo-yong-dekirukamobi-xu-jiao-yang-ninarisou&quot;&gt;AIを活用できるかも必須教養になりそう&lt;&#x2F;h3&gt;
&lt;p&gt;最近というか、ちょっと前は、&lt;br &#x2F;&gt;
プログラミングと英語が基礎教養になると騒がれていましたが、&lt;br &#x2F;&gt;
今後はこれにAIが加わりそうな予感がしました。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、案外ChatGPTを適切に使うのは、&lt;br &#x2F;&gt;
テクニックがいるからです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;適切なプロンプトを読み込ませるための工夫や、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;どういうことをChatGPTにやらせるかといったアイデアなど、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ChatGPTは便利ですが、それを活用し切るには、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そこそこのテクニックが必要そうです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、新しい職種としてプロンプトエンジニアなるものが、&lt;br &#x2F;&gt;
期待されていますが、これに伴いAIは今後の必須教養になるのかもしれないなと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;英語が読めない人は、それだけアクセスできる情報が減るように、&lt;br &#x2F;&gt;
AIが活用できないと、それだけ得られる利便性を失うという感じで、&lt;br &#x2F;&gt;
格差が今後生まれてきそうな予感がしました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wei-jing-yan-karaenziniahenodao&quot;&gt;未経験からエンジニアへの道&lt;&#x2F;h3&gt;
&lt;p&gt;これから未経験からエンジニアを目指す人は、&lt;br &#x2F;&gt;
結構厳しくなりそうな予感が個人的にはしています。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、こうしたGPTツールがあれば、&lt;br &#x2F;&gt;
未経験の人を一から育ててエンジニアを増やすよりも、&lt;br &#x2F;&gt;
スキルがある人がGPTをうまく使って、&lt;br &#x2F;&gt;
何人分ものバリューを出す方が現実的だからです。&lt;&#x2F;p&gt;
&lt;p&gt;そういう意味で、スキルがないエンジニアは、&lt;br &#x2F;&gt;
相対的に淘汰されやすくなるのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;また、&lt;strong&gt;淘汰されるかどうかの分岐点として、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;今後ChatGPTを使いこなせるかもポイントにあるのかなと感じました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最低限プロンプトエンジニアリングを学んで、&lt;br &#x2F;&gt;
泥臭くではなく、極力効率よくコードを書いていく手法を身に着けていく必要がありそうです。&lt;br &#x2F;&gt;
(コーディング自体が好きな人にとってはなんとも寂しい話ですが)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そうは言っても、現状だと、&lt;br &#x2F;&gt;
まだまだChatGPTがエンジニアを淘汰する水準には行っていません。&lt;&#x2F;p&gt;
&lt;p&gt;30代ぐらいで未経験からエンジニアを目指す人々は、新しい技術を学び、適応することが重要かもしれません。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enziniatositesheng-kican-rutameni&quot;&gt;エンジニアとして生き残るために&lt;&#x2F;h2&gt;
&lt;p&gt;以上を踏まえて、&lt;br &#x2F;&gt;
エンジニアとして生き残るには、&lt;br &#x2F;&gt;
やや大変な時代に突入しそうだなとは思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そう入っても、&lt;br &#x2F;&gt;
ChatGPTによって、&lt;br &#x2F;&gt;
未経験技術へのハードルはかなり下がったと思うので、&lt;br &#x2F;&gt;
技術のキャッチアップ自体はしやすくなっていると思います。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、現在のような過渡度は、&lt;br &#x2F;&gt;
いかにこうしたAIツールを使って、&lt;br &#x2F;&gt;
差をつけるかで今後生き残れるかが変わってくるような気がしました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、いつかChatGPTとかが、&lt;br &#x2F;&gt;
すべてプログラミングしてくれるようになったら、&lt;br &#x2F;&gt;
いよいよエンジニアは不要になるので、&lt;br &#x2F;&gt;
その日になったら、今まで身につけてきたスキルが&lt;br &#x2F;&gt;
役に立たなくなると思うと、少々やりきれない感はあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そうなっている日には、&lt;br &#x2F;&gt;
他の職業もそうなっていると思うので、&lt;br &#x2F;&gt;
あまり将来の不安ばかり考えすぎずに、&lt;br &#x2F;&gt;
ChatGPTの便利な部分を積極的に使っていくというのが、&lt;br &#x2F;&gt;
AIとの良い付き合い方なのかもしれませんね。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【コードレビューとは？怖い？】改めてやり方・目的を考察する</title>
        <published>2023-11-05T00:00:00+00:00</published>
        <updated>2023-11-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/code_review/"/>
        <id>https://reisuta.com/code_review/</id>
        
        <content type="html" xml:base="https://reisuta.com/code_review/">&lt;p&gt;エンジニアとして現場に出ると、&lt;br &#x2F;&gt;
ほぼ100%、コードレビューというものに遭遇します。&lt;&#x2F;p&gt;
&lt;p&gt;もう当たり前すぎて、&lt;br &#x2F;&gt;
あまりコードレビューについて考えることは少ないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなコードレビューについて、&lt;br &#x2F;&gt;
&lt;strong&gt;今一度初心に帰って、本質や目的、やり方などについて、&lt;br &#x2F;&gt;
考察を深めてみようと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューのやり方などは、&lt;br &#x2F;&gt;
正解があるわけではないので、&lt;br &#x2F;&gt;
あくまで私が考えるベストなやり方について、&lt;br &#x2F;&gt;
本記事で紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;またそのやり方についても、&lt;br &#x2F;&gt;
技術的なやり方というよりは、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;emjo1804&#x2F;items&#x2F;48f6e78237a04684ab38&quot;&gt;こちらの記事&lt;&#x2F;a&gt;にあるようなメンタル・マインド面で重要なことに&lt;br &#x2F;&gt;
フォーカスしています。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、コードレビューに関連して、&lt;br &#x2F;&gt;
強強エンジニアとは何か？と考察した記事もあるので、&lt;br &#x2F;&gt;
興味がある方は、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;strong-engineer&#x2F;&quot;&gt;こちら&lt;&#x2F;a&gt;もご覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;strong-engineer&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kodorebiyutoha&quot;&gt;コードレビューとは？&lt;&#x2F;h2&gt;
&lt;p&gt;コードレビューとは、&lt;br &#x2F;&gt;
自分が書いたソースコードをプルリクエストとして、&lt;br &#x2F;&gt;
出した際に、ベースブランチにmergeする前に、&lt;br &#x2F;&gt;
他のエンジニアによる第三者チェックを挟むことで、&lt;br &#x2F;&gt;
まずいコードや冗長なコードなどを議論するようなものです。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、平たく言うと、&lt;br &#x2F;&gt;
&lt;mark&gt;第三者チェックとして、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;他のエンジニアに自分の書いたコードを見てもらうことですね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こういったレビュー自体は、&lt;br &#x2F;&gt;
ソースコードに限らず、例えばドキュメントレビューとか、&lt;br &#x2F;&gt;
文面レビューとか、色々あると思うので、&lt;br &#x2F;&gt;
コードレビューは、それのソースコード版というだけなので、&lt;br &#x2F;&gt;
概念自体はシンプルですかね。&lt;&#x2F;p&gt;
&lt;p&gt;コンサルとかだとパワポレビューというものもあるらしいです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にソフトウェア開発はチーム開発なので、&lt;br &#x2F;&gt;
このようなコードレビューは、一般的には行われるのが普通ですね。&lt;&#x2F;p&gt;
&lt;p&gt;個人開発とかだと、コードレビューはあまりないかもしれませんね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kodorebiyuhabu-imono&quot;&gt;コードレビューは怖いもの？&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんなコードレビューですが、&lt;br &#x2F;&gt;
しばしば怖いものとして取り上げられることもあります。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、このコードレビューの際に、&lt;br &#x2F;&gt;
「こんなコード書いて恥ずかしくないの？」というような&lt;br &#x2F;&gt;
攻撃的なコメントをレビューワーがしてしまったり、&lt;br &#x2F;&gt;
あまりに細かいコメントとかをしすぎたりして、&lt;br &#x2F;&gt;
実装者が萎縮してしまう現象があるのが、&lt;br &#x2F;&gt;
背景にあるのかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;まず、大前提としてコードレビュー自体は、&lt;br &#x2F;&gt;
怖いものではありません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;言ってしまえば、コードレビューが怖いと思われるのは、&lt;br &#x2F;&gt;
レビューワーのレビューの仕方が良くないのかなと個人的には思います。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、コードレビューが怖いものとして&lt;br &#x2F;&gt;
現場で認識されるようになってしまった場合、&lt;br &#x2F;&gt;
もうその現場でのコードレビュー文化は、&lt;br &#x2F;&gt;
実質的には失敗していると個人的には考えます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ともすると、&lt;br &#x2F;&gt;
スキルが高い人がもてはやされるのが、&lt;br &#x2F;&gt;
良くも悪くもエンジニアですので、&lt;br &#x2F;&gt;
スキルが高い人のコメントは、&lt;br &#x2F;&gt;
攻撃的だろうとなんだろうと、&lt;br &#x2F;&gt;
通ってしまいやすいという構造もあるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;code_review&#x2F;software-developer-gcfbb909f2_1920-1-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kodorebiyunoyang-naxing-tai&quot;&gt;コードレビューの様々な形態&lt;&#x2F;h2&gt;
&lt;p&gt;さて、一口にコードレビューといっても、&lt;br &#x2F;&gt;
様々なシチュエーションが考えられます。&lt;&#x2F;p&gt;
&lt;p&gt;また、現場によっても、&lt;br &#x2F;&gt;
どういう方針でコードレビューを採用するかは異なることが&lt;br &#x2F;&gt;
多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ここでは、コードレビューのいくつかのパターンを&lt;br &#x2F;&gt;
あげていこうと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-fen-yorishang-noenzinianirebiyusitemorau-yi-ban-de-narebiyu&quot;&gt;自分より上のエンジニアにレビューしてもらう(一般的なレビュー)&lt;&#x2F;h3&gt;
&lt;p&gt;まず、よくあるのが、&lt;br &#x2F;&gt;
自分よりベテランないし、スキルが高い、または役職が上の人などに、&lt;br &#x2F;&gt;
レビューしてもらうパターンです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;おそらくこれが最もよくあるパターンかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、このパターンの場合、&lt;br &#x2F;&gt;
力関係がはっきりしているため、&lt;br &#x2F;&gt;
しばしば、前述の怖いコードレビューに陥りやすいという&lt;br &#x2F;&gt;
デメリットがあります。&lt;&#x2F;p&gt;
&lt;p&gt;自分より上のエンジニアに攻撃的なコメントをされてしまうと、&lt;br &#x2F;&gt;
なかなか反論できないものかと思うので、&lt;br &#x2F;&gt;
コードレビューとしては、かなりギスギスしたものになってしまう恐れがあります。&lt;&#x2F;p&gt;
&lt;p&gt;一方で、&lt;mark&gt;コードレビューの質自体は、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;自分より上の人の目を通してもらうことで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ソースコードの品質担保という面ではメリットに働くでしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、スキルの観点では、自分では気づけない観点とかを指摘してもらえるので、&lt;br &#x2F;&gt;
レビューのたびに強くなれるみたいなメリットはあるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;総じていうと、ストレスは溜まるが、&lt;br &#x2F;&gt;
スキルは上がるといったところでしょうか。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-fen-totong-deng-noenzinianirebiyusitemorau-xiang-hu-rebiyu&quot;&gt;自分と同等のエンジニアにレビューしてもらう(相互レビュー)&lt;&#x2F;h3&gt;
&lt;p&gt;次に、自分と同階級のエンジニアにレビューしてもらう、&lt;br &#x2F;&gt;
所謂相互レビューについてです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、私が勤めていた会社が採用している方針でした。&lt;br &#x2F;&gt;
メリットは、互いにフラットなので、&lt;br &#x2F;&gt;
コードレビューを通して、議論をしやすく、&lt;br &#x2F;&gt;
風通しも良いという特徴があります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、この場合はあまり怖いコードレビューには&lt;br &#x2F;&gt;
なりにくいかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;デメリットとしては、&lt;br &#x2F;&gt;
自分より上のエンジニアの場合の裏返しですが、&lt;br &#x2F;&gt;
質の担保に若干の不安があるということですね。&lt;&#x2F;p&gt;
&lt;p&gt;この場合は、ある程度自分でも、&lt;br &#x2F;&gt;
そのままmergeしても大丈夫だなっていう状態の品質にしておかないと、&lt;br &#x2F;&gt;
レビュー漏れが起きやすくなるので、品質担保の面では若干の不安が残りそうです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-fen-yorixia-noenzinianirebiyusitemorau-oshou-ben-wojian-seru&quot;&gt;自分より下のエンジニアにレビューしてもらう(お手本を見せる)&lt;&#x2F;h3&gt;
&lt;p&gt;これは正直そこまで一般的ではないのですが、&lt;br &#x2F;&gt;
先述の相互レビューの文脈で、&lt;br &#x2F;&gt;
「こういう感じで書いたから、参考にしてみてください」というように、&lt;br &#x2F;&gt;
下のエンジニアにお手本を見せるという場合で使うものかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、これに関しては、そもそもコードレビューじゃねえよってなるかもしれませんが、&lt;br &#x2F;&gt;
下のエンジニアが、コードレビューのフェーズを通して、&lt;br &#x2F;&gt;
議論をすることができるという点ではコードレビューになるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;メリットは、相互レビューのときとほぼ同様ですね。&lt;br &#x2F;&gt;
デメリットは、品質担保の面では、実質的に&lt;br &#x2F;&gt;
コードレビューなしというところでしょうか。というのも、&lt;br &#x2F;&gt;
下のエンジニアには、上のエンジニアが書いたコードをレビューするのは、&lt;br &#x2F;&gt;
現実的には難しいことが多いからです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kodorebiyuganaixian-chang&quot;&gt;コードレビューがない現場&lt;&#x2F;h3&gt;
&lt;p&gt;そもそも、コードレビューがない現場もあります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、正直文化としては、よほどの事情がない限り、&lt;br &#x2F;&gt;
成熟していないと言わざるを得ません。&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューをしないことによるデメリットは、&lt;br &#x2F;&gt;
枚挙にいとまがありません。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;コードの品質を担保できない&lt;&#x2F;li&gt;
&lt;li&gt;コードがどういう意図で追加したのかわからない&lt;&#x2F;li&gt;
&lt;li&gt;簡単にベースブランチにmergeできてしまうのは保守性の面で厳しい&lt;&#x2F;li&gt;
&lt;li&gt;エンジニアのスキルも上がりにくい&lt;&#x2F;li&gt;
&lt;li&gt;チーム開発のメリットを活かせていない&lt;&#x2F;li&gt;
&lt;li&gt;誰でも好き勝手にコードを書き換えられてしまう状況に近い&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;といったところでしょうか。(まだまだたくさんありそうですが)&lt;&#x2F;p&gt;
&lt;p&gt;わかりやすい例としては、&lt;br &#x2F;&gt;
今日入ったばかりの新人エンジニアが書いたソースコードを、&lt;br &#x2F;&gt;
コードレビューなしで、そのままmasterにmergeしてしまい、&lt;br &#x2F;&gt;
障害に繋がってしまったりなどでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、コードレビューをしたから、&lt;br &#x2F;&gt;
障害を防げるというわけではないのですが、&lt;br &#x2F;&gt;
そもそも最初からコードレビューをしないで障害が起きたのと、&lt;br &#x2F;&gt;
コードレビューをして、障害が起きたのとでは意味が違います。&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューをしていたのであれば、&lt;br &#x2F;&gt;
コードレビューの漏れを学習できるので、&lt;br &#x2F;&gt;
後に活かすことができます。&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューをしないというのは、&lt;br &#x2F;&gt;
よほどの特殊ケースを除いて、&lt;br &#x2F;&gt;
チーム開発の破綻と言っても過言ではないかもしれません。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kodorebiyunituitesi-ukoto&quot;&gt;コードレビューについて思うこと&lt;&#x2F;h2&gt;
&lt;p&gt;さて、コードレビューの概要について、&lt;br &#x2F;&gt;
大まかに述べてきました。&lt;&#x2F;p&gt;
&lt;p&gt;ここで私なりに、コードレビューについて&lt;br &#x2F;&gt;
思うことを縷縷述べていきたいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kodorebiyunomu-de&quot;&gt;コードレビューの目的&lt;&#x2F;h3&gt;
&lt;p&gt;まず目的ですが、&lt;br &#x2F;&gt;
これは正直チームによって変わるような気がします。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、コードレビューの目的として&lt;br &#x2F;&gt;
よく取り上げられるものとしては、&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ソースコードの品質担保&lt;&#x2F;li&gt;
&lt;li&gt;第三者チェック&lt;&#x2F;li&gt;
&lt;li&gt;チーム開発の文化醸成&lt;&#x2F;li&gt;
&lt;li&gt;コードレビューを通して現状のコードのissueを見つけたりと議論のプラットフォームとして機能させる&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;といったところでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;なので、そのチームによって、&lt;br &#x2F;&gt;
上記のどれを重視するかによって、&lt;br &#x2F;&gt;
目的も変わるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;一般的には第三者チェックが、&lt;br &#x2F;&gt;
コードレビューの目的になることが多い気がします。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kodorebiyunokosuto&quot;&gt;コードレビューのコスト&lt;&#x2F;h4&gt;
&lt;p&gt;コードレビューは、基本的には行うべきものですが、&lt;br &#x2F;&gt;
少なからぬ工数がかかるのも事実です。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、基本的に、&lt;br &#x2F;&gt;
自分のタスクを中断して、&lt;br &#x2F;&gt;
他のエンジニアが書いたコードを見て、&lt;br &#x2F;&gt;
検証するというのは、コード量にもよりますが、&lt;br &#x2F;&gt;
それなりに工数がかかるものでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;その点を勘案して、&lt;br &#x2F;&gt;
&lt;mark&gt;コードレビューの比重を落とすなどは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;チームによっては有り得る選択でしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、個人的には、&lt;br &#x2F;&gt;
コードレビューをしやすいようにするというのも、&lt;br &#x2F;&gt;
大事かと思っていて、&lt;br &#x2F;&gt;
実装者が事前に「こういう観点で見てほしい」などと伝えておけば、&lt;br &#x2F;&gt;
レビューワーも負担が減る思うので、&lt;br &#x2F;&gt;
そういう気遣いで、コードレビューの工数は小さくできるような気もします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kodorebiyudeyatutehaikenaikoto&quot;&gt;コードレビューでやってはいけないこと&lt;&#x2F;h3&gt;
&lt;p&gt;コードレビューでやってはいけないことの最たるものは、&lt;br &#x2F;&gt;
&lt;strong&gt;攻撃的なコメントです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、「なんでここのコードこんな汚いの？」みたいな、&lt;br &#x2F;&gt;
&lt;strong&gt;直接的かつ、実装者を貶めるようなコメントは絶対にやってはいけません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、スキルが高いエンジニアの方に限って、&lt;br &#x2F;&gt;
このようなコメントをしてしまっているケースは少なく有りません。&lt;&#x2F;p&gt;
&lt;p&gt;スキルが高い人からすると、なぜこんなコードになるの？という&lt;br &#x2F;&gt;
シンプルな疑問の発露なのかもしれませんが、&lt;br &#x2F;&gt;
それを受け取る側からしたら、かなり威圧的に感じるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;それが結局のところ、コードレビューが怖いの原因になったりします。&lt;&#x2F;p&gt;
&lt;p&gt;また、このような攻撃的なコメント以外にも、&lt;br &#x2F;&gt;
決めつけのようなコメントも好ましくないなと個人的には思います。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、「ここはちょっとまずいですね。修正してください」のような、&lt;br &#x2F;&gt;
まずいことが前提で話を進めてしまうのは、一方的なコミュニュケーションになりがちです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ただ、コードレビューの難しいところは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;まずいコードは確かに指摘する必要があるので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;まずいコードを見つけて、黙認するのもよくありません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その場合は、「ここのコードはこういう風にしたらどうでしょうか？」と&lt;br &#x2F;&gt;
&lt;strong&gt;あくまで提案スタイルでコメントするのが好ましいと思います。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
その際、例示のコードも一緒に添えておくと親切かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューは品質担保の側面ももちろんあるのですが、&lt;br &#x2F;&gt;
それ以前に、&lt;strong&gt;コミュニュケーションの一種です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コードレビューしていると、目の前のコードばかりを見てしまって、&lt;br &#x2F;&gt;
忘れがちですが、向こうにはそのコードを実装してくれた人がいるということを&lt;br &#x2F;&gt;
忘れてはなりません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;基本的に、コードレビューは、実装者とのコミュニュケーションです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
一方的だったり、高圧的だと、円滑なコミュニュケーションになり得ないのは&lt;br &#x2F;&gt;
言うまでもないかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;コードレビューのコミュニュケーションの側面を軽視しすぎた結果が、&lt;br &#x2F;&gt;
コードレビューが怖いというイメージの醸成にもつながっているのかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それに、レビューワーと実装者のスキルレベルがよほど離れている場合を除いて、&lt;br &#x2F;&gt;
&lt;strong&gt;基本的にそのコードについては、実装者が一番詳しいものです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、そもそも実装者はコードレビューに対して、&lt;br &#x2F;&gt;
異議があれば、「ここはそういう意図ではありません」という風に、&lt;br &#x2F;&gt;
反論するのも全然ありです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にコードレビューは、&lt;br &#x2F;&gt;
先輩エンジニアが後輩のコードをレビューして&lt;br &#x2F;&gt;
修正させるという一方通行のものではなく、&lt;br &#x2F;&gt;
対話の場所ということは軽視すべきではないと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kodorebiyunoyarifang&quot;&gt;コードレビューのやり方&lt;&#x2F;h3&gt;
&lt;p&gt;上記を踏まえて、&lt;br &#x2F;&gt;
コードレビューのやり方ですが、&lt;br &#x2F;&gt;
基本的には下記の点が重要だと思います。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;コメントは必ず敬語&lt;&#x2F;li&gt;
&lt;li&gt;実装者へのリスペクトを忘れない&lt;&#x2F;li&gt;
&lt;li&gt;良くないと思ったコードは提案形式でコメントする&lt;&#x2F;li&gt;
&lt;li&gt;最終的に修正するかどうかは、よほどまずいコードとかじゃない限り実装者に任せる(修正を強制したり、指揮命令関係になるべきではない)&lt;&#x2F;li&gt;
&lt;li&gt;まずいと思ったコードも、即座にまずいと決めつけるのではなく、そういうコードにした意図を聞く&lt;&#x2F;li&gt;
&lt;li&gt;レビューワーは、質問や提案をしていくことで、実装者にまずい部分を気付かせるのが理想(直接ここがだめとは指摘しない)&lt;&#x2F;li&gt;
&lt;li&gt;レビューワーは、実装者が考慮していなさそうな部分(実装者の苦手部分)とかでコードを見て、まずい部分を探す&lt;&#x2F;li&gt;
&lt;li&gt;動作確認して問題ないか確認する&lt;&#x2F;li&gt;
&lt;li&gt;良いと思ったコードは、褒める(ただ、これはレビューワーが実装者よりも先輩の場合。同階級だと下手に優劣の文脈が生じる可能性があるのでケースバイケース)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;要するに、コードレビューは、&lt;br &#x2F;&gt;
&lt;strong&gt;実装者とのコミュニュケーションで、&lt;br &#x2F;&gt;
実装者へのリスペクトを忘れてはならないということが、&lt;br &#x2F;&gt;
最も大切なことだと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;世間で強強と言われている人に限って、&lt;br &#x2F;&gt;
自分がスキルが高い反面、&lt;br &#x2F;&gt;
こういった基本的なことを軽視している印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;変数の命名、リーダブルコードとかでもわかりますが、&lt;br &#x2F;&gt;
コードを書くことは、チーム開発で、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;他のエンジニアがどう受け取るかということを汲み取る力は、&lt;br &#x2F;&gt;
エンジニアの基本スキルです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;世間で強強と言われていても、&lt;br &#x2F;&gt;
こういったことを軽視するような人(所謂ブリリアントジャーク)は、&lt;br &#x2F;&gt;
二流、三流と言わざるを得ません。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【強強エンジニアになるための習慣】技術力を高める方法</title>
        <published>2023-10-05T00:00:00+00:00</published>
        <updated>2023-12-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/strong-engineer/"/>
        <id>https://reisuta.com/strong-engineer/</id>
        
        <content type="html" xml:base="https://reisuta.com/strong-engineer/">&lt;p&gt;エンジニア界隈で、&lt;br &#x2F;&gt;
しばしば「強強エンジニア」という&lt;br &#x2F;&gt;
ワードを耳にします。&lt;&#x2F;p&gt;
&lt;p&gt;スラングのようなものなので、&lt;br &#x2F;&gt;
厳密な言葉というわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、この「強強エンジニア」という言葉は、&lt;br &#x2F;&gt;
&lt;strong&gt;一定の市民権を得ている、エンジニアのキャリアを考える上で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そこそこ重要な言葉だとも思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では、この「強強エンジニア」というものに&lt;br &#x2F;&gt;
焦点を当て、その意味から、&lt;br &#x2F;&gt;
そうなるための具体的な施策を紹介します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qiang-qiang-enziniatohahe-ka&quot;&gt;強強エンジニアとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;はじめに申し上げたように、&lt;br &#x2F;&gt;
この言葉はスラングのようなものなので、&lt;br &#x2F;&gt;
厳密な定義が存在するわけではなないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、人によって、&lt;br &#x2F;&gt;
定義が微妙に異なるかと思いますが、&lt;br &#x2F;&gt;
一般的には、&lt;strong&gt;技術力が高いエンジニア&lt;&#x2F;strong&gt;を&lt;br &#x2F;&gt;
指す言葉だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、どの程度で技術力が高いのかというと、&lt;br &#x2F;&gt;
難しい話題です。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、&lt;strong&gt;下記のようなエンジニアを強強エンジニアと&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;定義します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;強みがある技術についての弱いところと強いところを理解している(専門性)&lt;&#x2F;li&gt;
&lt;li&gt;技術選定、コードレビューを行える(検証・査定能力)&lt;&#x2F;li&gt;
&lt;li&gt;使ったことがない技術に対するキャッチアップや応用が利く(応用性)&lt;&#x2F;li&gt;
&lt;li&gt;インフラ、ミドルウェアなどプログラミング言語以外についての知見が深い(専門性)&lt;&#x2F;li&gt;
&lt;li&gt;自分が足りていない部分を理解している(マインド)&lt;&#x2F;li&gt;
&lt;li&gt;アルゴリズムの理解やプログラミングスキルが高い(競技プログラミング・コーディングスキル)&lt;&#x2F;li&gt;
&lt;li&gt;要件定義から保守運用まで一人で行おうと思えば行える(実務性)&lt;&#x2F;li&gt;
&lt;li&gt;設計、アーキテクチャについての視点がある(専門性)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;これら全てを満たしていないと強強エンジニアとして&lt;br &#x2F;&gt;
認めないというわけではなく、これらの80%ぐらいを&lt;br &#x2F;&gt;
満たしていれば強強エンジニアと十分言えると感じます。&lt;&#x2F;p&gt;
&lt;p&gt;特に、専門性、検証・査定能力、応用性、実務性、コーディングスキルの5つの部分を&lt;br &#x2F;&gt;
満たしていれば、かなりの強強エンジニアだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;具体的なイメージ像としては、&lt;br &#x2F;&gt;
TypeScript&#x2F;Next.jsのフロントの実装もでき、&lt;br &#x2F;&gt;
GoやSQLなどのバックエンドもある程度でき、&lt;br &#x2F;&gt;
AWSなどのインフラへの理解もある、フルスタックエンジニアっぽい&lt;br &#x2F;&gt;
ベテランエンジニアとかがわかりやすいと思います。&lt;br &#x2F;&gt;
(この場合、上記でいうと実務性が特に高い強強エンジニア)&lt;&#x2F;p&gt;
&lt;p&gt;一般的な強強エンジニアというと、&lt;br &#x2F;&gt;
このように、「この人に頼ればなんとかしてくれそう」みたいな&lt;br &#x2F;&gt;
ものが多いと思いますが、個人的にはこれに限らず強強エンジニアは&lt;br &#x2F;&gt;
存在すると思っています。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、個人的には、&lt;br &#x2F;&gt;
このような強強エンジニア = フルスタックエンジニアという&lt;br &#x2F;&gt;
認識ではおりません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;&quot;&gt;フルスタックエンジニア&lt;&#x2F;a&gt;も、曖昧な言葉なので、&lt;br &#x2F;&gt;
以前、下記の記事で考察しているので、&lt;br &#x2F;&gt;
良ければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;817&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;以下、このようなエンジニアになるために必要な&lt;br &#x2F;&gt;
習慣について考察します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qiang-qiang-enzinianinarutamenoxi-guan&quot;&gt;強強エンジニアになるための習慣&lt;&#x2F;h2&gt;
&lt;p&gt;専門性、検証・査定能力、応用性、実務性、コーディングスキル、マインドなどの、&lt;br &#x2F;&gt;
部分ごとに役に立つであろう習慣を紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;まず、それぞれの抽象レベルでの話をしたあと、&lt;br &#x2F;&gt;
具体的な実行策を紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jing-ji-puroguramingu&quot;&gt;競技プログラミング&lt;&#x2F;h3&gt;
&lt;p&gt;1つ目は、競技プログラミングです。&lt;br &#x2F;&gt;
これは、&lt;strong&gt;コーディングスキルやマインド&lt;&#x2F;strong&gt;の面で&lt;br &#x2F;&gt;
大きく役に立ちます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、競技プログラミングだけやっていても、&lt;br &#x2F;&gt;
上記であげた、実務性、専門性などの能力は伸ばしにくいので、&lt;br &#x2F;&gt;
それらは他でカバーする必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;けれども、&lt;strong&gt;コーディングスキルという観点では、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;最も寄与する習慣だと言っても過言ではないでしょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の実務性が強いエンジニアも、&lt;br &#x2F;&gt;
この競技プログラミングとかでのコーディングスキル面で、&lt;br &#x2F;&gt;
強強エンジニアかというと必ずしも断定はできないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;人によっては、競技プログラミングは&lt;br &#x2F;&gt;
意味ないと言う人もいるぐらいですからね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;個人的には、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;競技プログラミングはめちゃくちゃ役に立ちます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的なプログラミングの思考能力や、&lt;br &#x2F;&gt;
実装能力や競技プログラミングでかなり鍛えることができます。&lt;&#x2F;p&gt;
&lt;p&gt;また、競技プログラミング界隈は、&lt;br &#x2F;&gt;
自分より優秀な人がうんざりするくらいいるので、&lt;br &#x2F;&gt;
自分より優秀な人が多くいる環境にいても、&lt;br &#x2F;&gt;
めげずに励み続けるマインドを養うこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;たしかに、競技プログラミングが直接実務に役立つとは&lt;br &#x2F;&gt;
言い難いですが、強強エンジニアになるための、&lt;br &#x2F;&gt;
一つの習慣になることは間違いないです。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;atcoder&quot;&gt;AtCoder&lt;&#x2F;h4&gt;
&lt;p&gt;具体的なアクションとして、&lt;br &#x2F;&gt;
まずは、AtCoderでのACを&lt;br &#x2F;&gt;
毎日必ず一つは狙うとか、&lt;br &#x2F;&gt;
毎日CとかD問題とか、&lt;br &#x2F;&gt;
何らかの問題を解くのがいいかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;似たようなものとして、&lt;br &#x2F;&gt;
転職サイトのPaizaとかもありますが、&lt;br &#x2F;&gt;
習慣という意味では、やはり王道ですが、&lt;br &#x2F;&gt;
AtCoderが一番おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;AtCoder Problemsのコンテストを毎日解いて、&lt;br &#x2F;&gt;
毎日解説を読むという習慣を始めてみてはどうでしょう？&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;kenkoooo.com&#x2F;atcoder&#x2F;#&#x2F;table&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;strong-engineer&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ge-ren-kai-fa&quot;&gt;個人開発&lt;&#x2F;h3&gt;
&lt;p&gt;次は、個人開発です。&lt;br &#x2F;&gt;
これは、かなり万能でして、&lt;br &#x2F;&gt;
&lt;mark&gt;専門性、検証・査定能力、応用性、実務性、コーディングスキル、マインドのほぼすべてを&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;カバーすることができる無敵の習慣でしょう。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;個人開発の最大のメリットは、&lt;br &#x2F;&gt;
実務で補えない部分を自分でコントロールできるという点にあります。&lt;&#x2F;p&gt;
&lt;p&gt;個人開発で収益化に成功すれば、&lt;br &#x2F;&gt;
実務経験にカウントすることもできると思うので、&lt;br &#x2F;&gt;
実務経験有りの技術を増やす手段としても有用だと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;next-js-go-aws-docker-kubernetes-redisnoyounapotohuoriowozuo-ru&quot;&gt;Next.js&#x2F;Go&#x2F;AWS&#x2F;Docker&#x2F;Kubernetes&#x2F;Redisのようなポートフォリオを作る&lt;&#x2F;h4&gt;
&lt;p&gt;個人開発者として大成するのが目的ではなく、&lt;br &#x2F;&gt;
強強エンジニアになるための習慣という文脈では、&lt;br &#x2F;&gt;
作りたいものではなく、&lt;strong&gt;使いたい技術ベースで開発をしていいと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その際は、タイトルにあるような、&lt;br &#x2F;&gt;
技術スタック例でアプリケーションを作成したりすれば、&lt;br &#x2F;&gt;
かなり役に立つと思います。&lt;&#x2F;p&gt;
&lt;p&gt;この際、どのような技術を選定して、&lt;br &#x2F;&gt;
どういう技術構成にするか自ずと考えることになるので、&lt;br &#x2F;&gt;
検証・査定能力も伸ばすことができますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shi-wu-wei-jing-yan-ji-shu-noding-qi-de-nakiyatutiatupu&quot;&gt;実務未経験技術の定期的なキャッチアップ&lt;&#x2F;h3&gt;
&lt;p&gt;これは、主に、&lt;br &#x2F;&gt;
応用性やマインドに効果的です。&lt;&#x2F;p&gt;
&lt;p&gt;実務経験だけだと、しばしばずっと使っている技術に&lt;br &#x2F;&gt;
慣れすぎてしまい、新鮮な気持ちを忘れてしまうこともあります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、たまにはあまり使ったことがない技術を触るのも、&lt;br &#x2F;&gt;
自分の中での技術のインデックスを増やすことができます。&lt;&#x2F;p&gt;
&lt;p&gt;これは専門性をのばすというよりは、&lt;br &#x2F;&gt;
自分の「詳しくは知らないけど、ちょっと触ったことがあるから、&lt;br &#x2F;&gt;
なんとなくはわかる」という領域を増やす作業とも言えるでしょう。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rustwomian-qiang-sitemiru&quot;&gt;Rustを勉強してみる&lt;&#x2F;h4&gt;
&lt;p&gt;Rust経験者の方は、&lt;br &#x2F;&gt;
Haskellとか、Scalaとかでも&lt;br &#x2F;&gt;
なんでもいいのですが、&lt;br &#x2F;&gt;
とりあえず、&lt;strong&gt;自分が強い言語と真逆の性質を持つ言語&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;を学ぶことをおすすめします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Railsエンジニアの人は、&lt;br &#x2F;&gt;
静的系で、非Web系のC++とか&lt;br &#x2F;&gt;
C#とか。&lt;&#x2F;p&gt;
&lt;p&gt;JavaとかC++とかの人は、&lt;br &#x2F;&gt;
逆にWeb系で動的言語の、&lt;br &#x2F;&gt;
Rubyとか、Pythonとか。&lt;&#x2F;p&gt;
&lt;p&gt;本記事を読んでいる方は、&lt;br &#x2F;&gt;
Web系エンジニアの人が多いと思うので、&lt;br &#x2F;&gt;
タイトルではRustとさせていただきました。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;vscodewoyameru&quot;&gt;VSCodeをやめる&lt;&#x2F;h4&gt;
&lt;p&gt;VSCodeを使っている人は&lt;br &#x2F;&gt;
多いと思うのですが、&lt;br &#x2F;&gt;
一度、慣れ親しんだ開発環境から抜け出して、&lt;br &#x2F;&gt;
違う環境で開発をするのも新しい発見とかあっておすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;Eclipseとか、Emacsでも、Vimでもなんでもいいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本ブログでは、VimやNeovimについては、&lt;br &#x2F;&gt;
割と多めに情報発信をしているので、&lt;br &#x2F;&gt;
良ければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;133&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;逆にVimとかを使っている人は、&lt;br &#x2F;&gt;
VSCodeとかもたまには使うのもいいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;osskai-fa&quot;&gt;OSS開発&lt;&#x2F;h3&gt;
&lt;p&gt;OSS開発は、主に、&lt;br &#x2F;&gt;
専門性、検証・査定能力に大きく寄与することが&lt;br &#x2F;&gt;
期待されます。&lt;&#x2F;p&gt;
&lt;p&gt;それ以外の部分にも寄与してくれると思いますが、&lt;br &#x2F;&gt;
OSS開発は、基本的には難易度が高いコードを読むことになると思うので、&lt;br &#x2F;&gt;
大抵の場合自分の強い技術を更に強くするために役立つ習慣と言えるでしょう。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;pu-duan-shi-tuteiruraiburarinokodowodu-mu&quot;&gt;普段使っているライブラリのコードを読む&lt;&#x2F;h4&gt;
&lt;p&gt;いきなりPRを出すのは、&lt;br &#x2F;&gt;
ハードルが高いと思うので、&lt;br &#x2F;&gt;
まずは、よく使っているライブラリとかの&lt;br &#x2F;&gt;
コードを読む習慣をつけるのがおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;Railsとかだと、&lt;br &#x2F;&gt;
Gemとかがたくさんあって、&lt;br &#x2F;&gt;
読みやすいものもたくさんあるので、&lt;br &#x2F;&gt;
おすすめです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shu-xue-cs&quot;&gt;数学・CS&lt;&#x2F;h3&gt;
&lt;p&gt;これは、応用性やコーディングスキルに間接的に&lt;br &#x2F;&gt;
寄与すると思われます。&lt;&#x2F;p&gt;
&lt;p&gt;新しい技術も根本的には古い技術と似ているところがあったりしますが、&lt;br &#x2F;&gt;
そういう部分の理解は、こうした数学やCSの造詣があると、&lt;br &#x2F;&gt;
スムーズな印象があります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;shu-jian-zhun-yi-ji-woqu-de-suru&quot;&gt;数検準一級を取得する&lt;&#x2F;h4&gt;
&lt;p&gt;理系の人は、不要なのですが、&lt;br &#x2F;&gt;
文系エンジニアの方は、数検準一級を&lt;br &#x2F;&gt;
取得してみるのも面白いのではないでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;なんだかんだで数学の知識が必要になってくる場面も&lt;br &#x2F;&gt;
たまにあるので、最低限の数学の知識はやはりほしいところです。&lt;&#x2F;p&gt;
&lt;p&gt;数検準一級は、ちょうど高校卒業レベルぐらいなので、&lt;br &#x2F;&gt;
レベル感もちょうどいいかと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;uopeopleyafang-song-da-xue&quot;&gt;UoPeopleや放送大学&lt;&#x2F;h4&gt;
&lt;p&gt;CSの勉強手段として、&lt;br &#x2F;&gt;
シンプルに大学に行くというのも、&lt;br &#x2F;&gt;
有りだと思いますが、&lt;br &#x2F;&gt;
社会人だとなかなか難しいですよね。&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、選択肢として出てくるのが、&lt;br &#x2F;&gt;
オンラインの大学のUoPeopleとか放送大学です。&lt;&#x2F;p&gt;
&lt;p&gt;特にUoPeopleは、CSの学位がもらえるので、&lt;br &#x2F;&gt;
おすすめです。（私は挫折しました)&lt;&#x2F;p&gt;
&lt;p&gt;学位とかより、シンプルに知識を身に着けたいという人は、&lt;br &#x2F;&gt;
放送大学とか、JMOOCとかgaccoとかでも&lt;br &#x2F;&gt;
いいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.jmooc.jp&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.jmooc.jp&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gacco.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;gacco.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Udemyとかでもいいと思いますが、&lt;br &#x2F;&gt;
有料の割に、かならずしも質が高いかというと&lt;br &#x2F;&gt;
微妙なので(主に専門性の深さの点で物足りなさを感じる)、&lt;br &#x2F;&gt;
個人的には可もなく不可もなくという印象です。&lt;&#x2F;p&gt;
&lt;p&gt;Udemyは実務未経験技術のキャッチアップという文脈では、&lt;br &#x2F;&gt;
取っ掛かりとしては悪くないなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;osusumesinaixi-guan&quot;&gt;おすすめしない習慣&lt;&#x2F;h2&gt;
&lt;p&gt;上記で、強強エンジニアになるための、&lt;br &#x2F;&gt;
習慣をざっと述べましたが、&lt;br &#x2F;&gt;
それとは逆に、&lt;br &#x2F;&gt;
強強エンジニアっぽくない習慣も少し紹介しようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;あくまで、&lt;strong&gt;私個人の意見ということと、&lt;br &#x2F;&gt;
ここにあげる習慣が悪いというわけではなく、&lt;br &#x2F;&gt;
こればっかりやるのは良くないという意味&lt;&#x2F;strong&gt;だということは&lt;br &#x2F;&gt;
ご了承ください。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gong-shi-dokiyumentoyorimoqiitayage-ren-noji-shu-burogutokawodu-mu&quot;&gt;公式ドキュメントよりもQiitaや個人の技術ブログとかを読む&lt;&#x2F;h3&gt;
&lt;p&gt;技術ブログを運営している私としては、&lt;br &#x2F;&gt;
あまり言いたくないことではありますが、&lt;br &#x2F;&gt;
&lt;strong&gt;強強エンジニアの人って、そもそも&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;技術ブログとかQiitaをあまり見ていない印象があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なぜかというと、彼らは公式ドキュメントで足りているからです。&lt;&#x2F;p&gt;
&lt;p&gt;公式ドキュメントは、正確性・網羅性などの、ほぼすべての点で、&lt;br &#x2F;&gt;
個人のブログなどの情報よりも勝っています。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、まず公式ドキュメントを読むということは基本といえば&lt;br &#x2F;&gt;
基本です。&lt;&#x2F;p&gt;
&lt;p&gt;これを軽視して、公式ドキュメントを読む前に、&lt;br &#x2F;&gt;
Qiitaとかを漁ってしまうのは、&lt;br &#x2F;&gt;
あまり良い習慣とは言えないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Qiitaや個人のブログは、&lt;br &#x2F;&gt;
使ったことがない技術に対するキャッチアップや応用が利く(応用性)の面で、&lt;br &#x2F;&gt;
寄与するのに対し、公式ドキュメントは、&lt;br &#x2F;&gt;
専門性に寄与すると言えるので、&lt;br &#x2F;&gt;
Qiitaとかは、自分の技術のインデックスを増やす&lt;br &#x2F;&gt;
ために活用するのがいいのかなと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;puroguraminguyan-yu-yafwnoji-shu-shu-bakaridu-mu&quot;&gt;プログラミング言語やFWの技術書ばかり読む&lt;&#x2F;h3&gt;
&lt;p&gt;これも、決して悪いことではありません。&lt;&#x2F;p&gt;
&lt;p&gt;むしろ、全然技術書を読まない人に比べると、&lt;br &#x2F;&gt;
大変素晴らしいです。&lt;&#x2F;p&gt;
&lt;p&gt;ですが、プログラミング言語の学習やFWの学習というのは、&lt;br &#x2F;&gt;
煎じ詰めると、Qiitaの場合と同じく、&lt;br &#x2F;&gt;
自分のインデックスを貼る作業に近く、&lt;br &#x2F;&gt;
使える道具を増やすスキルになるので、&lt;br &#x2F;&gt;
専門性を極める作業とは言い難いです。&lt;&#x2F;p&gt;
&lt;p&gt;強強エンジニアは、基本的に高い専門性を持っているので、&lt;br &#x2F;&gt;
色々な言語やFWを広く浅くやっていては、&lt;br &#x2F;&gt;
専門性を身につけるのはどうしても遠回りになってしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、これらの学習は、あくまで&lt;br &#x2F;&gt;
インデックスを貼る作業と割り切って、&lt;br &#x2F;&gt;
やるのがおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;個人的には、こういった技術書よりも、&lt;br &#x2F;&gt;
設計手法やアーキテクチャー、ミドルウェアとかの&lt;br &#x2F;&gt;
技術書を読む方が、プログラミング言語に関わらず活かせる知見になるので、&lt;br &#x2F;&gt;
使える領域が増えるのでおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;technical-book&#x2F;&quot;&gt;おすすめの技術書&lt;&#x2F;a&gt;のついては、&lt;br &#x2F;&gt;
下記の記事でも紹介しているので、&lt;br &#x2F;&gt;
良ければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-ge-qu-de-nikodawarisugiru&quot;&gt;資格取得にこだわりすぎる&lt;&#x2F;h3&gt;
&lt;p&gt;しばしば議題にのぼる、&lt;br &#x2F;&gt;
資格論争ですが、&lt;br &#x2F;&gt;
これも基本的には、&lt;br &#x2F;&gt;
こだわりすぎる必要はないと私は考えます。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、あるに越したことはありません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、強強エンジニアになるための、&lt;br &#x2F;&gt;
近道ではないかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;自分が勉強したい分野があり、&lt;br &#x2F;&gt;
そのための手段としてついでに資格も取るというのが、&lt;br &#x2F;&gt;
最も合理的かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;資格取得を目的にして、&lt;br &#x2F;&gt;
闇雲に受験するのは、&lt;br &#x2F;&gt;
おすすめしないです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fu-ye-bakarideben-ye-woorosokanisuru&quot;&gt;副業ばかりで本業をおろそかにする&lt;&#x2F;h3&gt;
&lt;p&gt;これもあるあるですね。&lt;&#x2F;p&gt;
&lt;p&gt;副業が忙しくて、&lt;br &#x2F;&gt;
本業の仕事を雑にしてしまうことです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、処世術としては、&lt;br &#x2F;&gt;
悪くないのですが、&lt;br &#x2F;&gt;
技術力を伸ばして、&lt;br &#x2F;&gt;
強強エンジニアになるという点ではあまり得策ではありません。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、副業で得られる技術的知見と、&lt;br &#x2F;&gt;
本業で得られる技術的知見とでは、やはり&lt;br &#x2F;&gt;
本業の方が遥かに多いからです。&lt;br &#x2F;&gt;
(もし本業のほうが少ないとしたら、&lt;br &#x2F;&gt;
それはある意味で転職のサインかもしれません)&lt;&#x2F;p&gt;
&lt;p&gt;転職の面接とかでも、&lt;br &#x2F;&gt;
基本は本業でどのようなことをしてきたか聞かれます。&lt;&#x2F;p&gt;
&lt;p&gt;本業でのらりくらりやっていただけでは、&lt;br &#x2F;&gt;
良い回答はできないかもしれません。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qiang-qiang-enziniatopu-tong-noenzinianowei-i&quot;&gt;強強エンジニアと普通のエンジニアの違い&lt;&#x2F;h2&gt;
&lt;p&gt;最後に、強強エンジニアと普通のエンジニアの違いとして&lt;br &#x2F;&gt;
いくつか、独断と偏見で思いついたものを並べておきます。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;強強エンジニア&lt;&#x2F;td&gt;&lt;td&gt;普通のエンジニア&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;エラーへの捉え方&lt;&#x2F;td&gt;&lt;td&gt;話し相手。出てきくれて嬉しい&lt;&#x2F;td&gt;&lt;td&gt;面倒くさいから出てくんなよ&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;技術興味の領域&lt;&#x2F;td&gt;&lt;td&gt;設計・アーキテクチャ・ミドルウェアなどプログラミング言語によらない技術寄り&lt;&#x2F;td&gt;&lt;td&gt;プログラミング言語、FWなど&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;技術への興味&lt;&#x2F;td&gt;&lt;td&gt;強い。土日も開発してる&lt;&#x2F;td&gt;&lt;td&gt;普通。土日はプログラミングしたくない&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;普段考えていること&lt;&#x2F;td&gt;&lt;td&gt;何らかのプログラミングのこと&lt;&#x2F;td&gt;&lt;td&gt;プログラミング以外のこと&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;情報収集手段&lt;&#x2F;td&gt;&lt;td&gt;公式ドキュメント&lt;&#x2F;td&gt;&lt;td&gt;Qiitaとか&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;使ったことない技術について&lt;&#x2F;td&gt;&lt;td&gt;ワクワクする&lt;&#x2F;td&gt;&lt;td&gt;キャッチアップ面倒くさい&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;自分の技術力について&lt;&#x2F;td&gt;&lt;td&gt;まだまだ未熟と考える&lt;&#x2F;td&gt;&lt;td&gt;そこそこ習得していると考える&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【プログラミング】エンジニア実務経験の幻想について 年数偏重の歪み</title>
        <published>2023-08-21T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/work-experience/"/>
        <id>https://reisuta.com/work-experience/</id>
        
        <content type="html" xml:base="https://reisuta.com/work-experience/">&lt;blockquote&gt;
&lt;p&gt;転職するにもどこも実務経験年数を募集要項にしているな&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;ぶっちゃけ自社サービス企業でまったり開発していただけだけど実務経験だけは5年だわ&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;副業とOSSコミットと、炎上案件乗り切ったけどまだ実務経験2年。でもそのへんの3 ~ 5年エンジニアに負けていないと思うんだけどな。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;以前、下記のような投稿をしまして、&lt;br &#x2F;&gt;
このテーマについて、もっと深掘りしてみたいという内容です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1692758515012743642&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;現実問題としては、もちろん実務経験年数があるのが有利ですが、&lt;br &#x2F;&gt;
果たして、この実務経験年数がどれぐらい信頼性があるのかは、&lt;br &#x2F;&gt;
気になるところ。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では実務経験年数について、考察を深めたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Youtube動画でも取り上げた話題です。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;QS10o0jN4PU&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;enziniacai-yong-nimatuwarushi-wu-jing-yan-nituite&quot;&gt;エンジニア採用にまつわる実務経験について&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;shi-wu-jing-yan-toha&quot;&gt;実務経験とは？&lt;&#x2F;h3&gt;
&lt;p&gt;まず、そもそも実務経験とは？って話ですが、&lt;br &#x2F;&gt;
文字通りの意味で、&lt;strong&gt;エンジニアとしてお金をもらって従事した経験のことですね。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
会社で働いたりとか、フリーランスで案件を行ったり、&lt;br &#x2F;&gt;
個人開発アプリで収益化とかしたら実務経験といえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;また、収益化ではなくとも、&lt;br &#x2F;&gt;
&lt;strong&gt;OSSに継続的なコントリビュートをすれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;これも実務経験にカウントできるでしょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、OSS開発は、基本的に高難易度のことが多く、&lt;br &#x2F;&gt;
独力でOSSのコードを読んで、issueを把握して、プルリクエストを出して、&lt;br &#x2F;&gt;
mergeされるという過程を要するため、&lt;br &#x2F;&gt;
プログラミングスキルが高くないと努まりません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、OSSとはいっても、私が適当に作ったクソアプリもジャンル上OSSになってしまうので、&lt;br &#x2F;&gt;
基本は多くのエンジニアやユーザーなどに使われている大規模OSSであることが前提になります。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby界隈とかだと、Railsをはじめとする、有名なrspec, rubocop, kamainariのようなGemがわかりやすいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にこれらの経験が実務経験といえるでしょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;enziniacai-yong-denomu-ji-yao-xiang&quot;&gt;エンジニア採用での募集要項&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんな実務経験ですが、Webエンジニアなどの場合、&lt;br &#x2F;&gt;
就職などする場合、必ずといっていいほど実務経験が重視されます。&lt;&#x2F;p&gt;
&lt;p&gt;中途採用の一般的なボーダーとしては、&lt;br &#x2F;&gt;
実務経験3年を設けている企業が多い印象です。&lt;br &#x2F;&gt;
(そして大抵の場合、言語やフレームワークごとに年数を設けています。)&lt;&#x2F;p&gt;
&lt;p&gt;Webエンジニアをはじめとした、ソフトウェアエンジニアは、&lt;br &#x2F;&gt;
高度な専門知識が要求される職業のため、&lt;br &#x2F;&gt;
&lt;mark&gt;一定の実務経験を募集要項に求めるのは、&lt;br &#x2F;&gt;
非常に合理的なやり方だと言えるでしょう。&lt;&#x2F;mark&gt;&lt;mark&gt;&lt;&#x2F;mark&gt;&lt;mark&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;しかし、個人的な印象としては、&lt;br &#x2F;&gt;
あまりにこの実務経験を過信しすぎているような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、そもそもこの実務経験というものが、&lt;br &#x2F;&gt;
よくよく考えると曖昧で、指している領域が広すぎるからです。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、冒頭の投稿がいい例です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1692758515012743642&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この場合、&lt;br &#x2F;&gt;
前者のエンジニアは、実務経験こそ3年ありますが、&lt;br &#x2F;&gt;
3年間、同じ言語やフレームワークなどを使い、&lt;br &#x2F;&gt;
保守がメインで新規でゴリゴリ開発する機会はそこまで多くなかったとすると、&lt;br &#x2F;&gt;
大抵の場合、後者のエンジニアのほうが、スキルとしては、優れている可能性が高いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;それでも、多くの場合足切りにひっかるのは、&lt;br &#x2F;&gt;
後者のエンジニアになってしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;このような業界の構造が、&lt;br &#x2F;&gt;
歪に感じるのは私だけでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;主に、下記の点でいびつさを感じます。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;実務経験偏重すぎる&lt;&#x2F;li&gt;
&lt;li&gt;早期離職がマイナスになる(これは確かに一般的にはマイナスでしょうが、エンジニアの場合必ずしもマイナスにならないと思います。)&lt;&#x2F;li&gt;
&lt;li&gt;実務経験の中身で何をやってきたか、実務経験年数より軽視される。&lt;&#x2F;li&gt;
&lt;li&gt;そもそも実務経験年数だけでプログラミングスキルレベルが図れるという前提のもとに動いている気がする&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;shi-wu-jing-yan-nian-shu-zhi-shang-zhu-yi&quot;&gt;実務経験年数至上主義&lt;&#x2F;h3&gt;
&lt;p&gt;基本的に、ITエンジニアの募集要項は、&lt;br &#x2F;&gt;
実務経験3年や、5年といった年数ありきで、&lt;br &#x2F;&gt;
採用が行われている印象があり、&lt;br &#x2F;&gt;
この年数を満たしていないと足切りされることが多分にあります。(実体験)&lt;&#x2F;p&gt;
&lt;p&gt;このやり方は、合理的だと感じる一方、&lt;br &#x2F;&gt;
乱暴だとも感じます。&lt;&#x2F;p&gt;
&lt;p&gt;上記のようなケースで正しい判断ができないからです。&lt;&#x2F;p&gt;
&lt;p&gt;また、実務経験年数というものも、&lt;br &#x2F;&gt;
ただ、だらだらとエンジニアとして過ごして年数を稼ぐことも可能な点で、&lt;br &#x2F;&gt;
過信しすぎるのもどうなのかなと感じます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;work-experience&#x2F;office-gfaa23b407_1280-300x200.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;副業が可能な今では、１年でも３年に劣らない濃い経験を積んでいるエンジニアも多いと思うので、&lt;br &#x2F;&gt;
経験年数を足切りにするのは、そういった優秀なエンジニアを落としてしまう可能性がある気がします。&lt;&#x2F;p&gt;
&lt;p&gt;また、実務経験が少ない人のほうが、&lt;br &#x2F;&gt;
若い人の方が多い分、新しい技術に積極的だったり、&lt;br &#x2F;&gt;
柔軟だったり、勢いがあったりすることもあるので、&lt;br &#x2F;&gt;
必ずしもデメリットになるとも限らないとも思います。&lt;&#x2F;p&gt;
&lt;p&gt;これらの点で、実務経験年数だけを過信するのは、&lt;br &#x2F;&gt;
合理的なのか疑問が残ります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enzinianokiyaria&quot;&gt;エンジニアのキャリア&lt;&#x2F;h2&gt;
&lt;p&gt;エンジニアをキャリアを考える点では、&lt;br &#x2F;&gt;
様々な尺度があると思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、主に早期退職や自社サービスキャリアについて&lt;br &#x2F;&gt;
考察します。&lt;&#x2F;p&gt;
&lt;p&gt;以前、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;では、フルスタックエンジニアについて、&lt;br &#x2F;&gt;
考察しました。エンジニアのキャリアという観点では、&lt;br &#x2F;&gt;
こちらの尺度も考察しがいがある論点だと思うので、&lt;br &#x2F;&gt;
興味がある方は、ご覧いただけますと幸いです。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;enzinianozao-qi-li-zhi&quot;&gt;エンジニアの早期離職&lt;&#x2F;h3&gt;
&lt;p&gt;一般的に、キャリアにおいて、&lt;br &#x2F;&gt;
早期離職は、企業側にとって&lt;br &#x2F;&gt;
育成コストが無駄になったりと、&lt;br &#x2F;&gt;
デメリットが大きい分、&lt;br &#x2F;&gt;
早期離職するような人材は、採用しにくいというのはあると思いますし、&lt;br &#x2F;&gt;
これ自体はそのとおりだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、エンジニアの場合、&lt;br &#x2F;&gt;
色々なプロジェクトやシステムに触れた方が、&lt;br &#x2F;&gt;
濃い経験が積めるのは確かなので、&lt;br &#x2F;&gt;
エンジニアとしての成長を考えると、&lt;br &#x2F;&gt;
どうしても早期離職して、色々なシステムに触れるという経験が必要になる気がします。&lt;&#x2F;p&gt;
&lt;p&gt;Sierなどの受託開発の場合は、&lt;br &#x2F;&gt;
転職しなくとも、様々なプロジェクトにふれることができるかもしれませんが、&lt;br &#x2F;&gt;
それでも実際は、各Sierも自社の強み技術のようなものがあって、&lt;br &#x2F;&gt;
案件も似たりよったりになりやすいということはあるので、&lt;br &#x2F;&gt;
転職に比べると、全く別のシステムに触れられるという経験は積みにくいと思います。&lt;br &#x2F;&gt;
（私が以前努めていたSierは、Railsに定評があったので、&lt;br &#x2F;&gt;
ほぼ全ての案件がRailsでしたし、Railsデファクトの思想でプログラミングされていたので、&lt;br &#x2F;&gt;
Rails界隈ではそこまで流行っていない、DDDのような設計手法などに疎かったり、遅れがちな印象は有りました)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;work-experience&#x2F;graphic-design-studio-g0ff77deef_1920-300x200.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それに自社サービスだと、&lt;br &#x2F;&gt;
転職をしないと、他のサービスを見る機会がOSSしかなくなるため、&lt;br &#x2F;&gt;
なおさら、色々なシステムに触れる機会が少なくなってしまうでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ぶっちゃけた話、エンジニアにとっては、&lt;br &#x2F;&gt;
早期離職しないことのほうが、自身の技術力を停滞させてしまうかもしれないリスクを&lt;br &#x2F;&gt;
抱えているとも捉えることができます。&lt;&#x2F;p&gt;
&lt;p&gt;企業側にとっては、早期離職はリスクなのに対し、、&lt;br &#x2F;&gt;
エンジニア側は、早期離職しないことのほうがリスクになりうるという点で、&lt;br &#x2F;&gt;
双方が真逆のニーズになってしまっているという特徴はあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、現状の策としては、&lt;br &#x2F;&gt;
巷でよく言われているように、3 ~ 4年間ぐらい在籍して、&lt;br &#x2F;&gt;
転職するのが一番賢い立ち回りのような気がします。&lt;&#x2F;p&gt;
&lt;p&gt;様々なシステムをみて、技術力を高めるという点では、&lt;br &#x2F;&gt;
フリーランスが一番適しているのかもしれません&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-she-sabisukiyarianowei-he-gan&quot;&gt;自社サービスキャリアの違和感&lt;&#x2F;h3&gt;
&lt;p&gt;新卒で自社サービスの会社に就職して、&lt;br &#x2F;&gt;
三年間ぐらいずっとエンジニアとして勤務した場合、&lt;br &#x2F;&gt;
実務経験三年のエンジニアになります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、一般的な募集要項の足切りはだいたいクリアできるかと思います。&lt;br &#x2F;&gt;
ただ、正直このパターンのエンジニアは、次のような懸念があるように思えます。&lt;&#x2F;p&gt;
&lt;p&gt;[st-midasibox title=&quot;自社サービスエンジニアの懸念点&quot; webicon=&quot;st-svg-exclamation-circle faa-flash animated&quot; bordercolor=&quot;#f44336&quot; color=&quot;&quot; bgcolor=&quot;#ffebee&quot; borderwidth=&quot;&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; myclass=&quot;&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;様々な案件、システムなどを経験していない&lt;&#x2F;li&gt;
&lt;li&gt;使用技術が三年間同一または、似たりよったり&lt;&#x2F;li&gt;
&lt;li&gt;企業にもよるが運用メインの場合は、プログラミングスキルが低いことが予想される&lt;&#x2F;li&gt;
&lt;li&gt;良くも悪くもぬるま湯パターンが多い&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;もちろん、あくまで懸念なので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;これに当てはまらない優秀な自社サービス勤務のエンジニアもたくさんいると思います。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;（それに自社サービスは、最初の時点で就職難易度が高いですし)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、もしフロントエンジニアとかであれば、&lt;br &#x2F;&gt;
自社サービス出身の人は、懸念点が多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、自社の場合、&lt;br &#x2F;&gt;
使用技術を簡単に変えることができないので、&lt;br &#x2F;&gt;
何だかんだでレガシー技術をリファクタリングして運用していくことが必要になるため、&lt;br &#x2F;&gt;
モダンフロントエンドにふれる機会がなかったりします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;work-experience&#x2F;software-developer-gcfbb909f2_1920-300x200.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これは、フロントエンドエンジニアにとっては、&lt;br &#x2F;&gt;
場合によっては致命傷になる気もするので、&lt;br &#x2F;&gt;
自社サービスで3年間実務経験を積んだから、&lt;br &#x2F;&gt;
足切りが突破しやすくなるというのは、&lt;br &#x2F;&gt;
個人的にはかなり違和感があります。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、jQueryで運用されているレガシーシステムの自社フロントエンドエンジニアなどが&lt;br &#x2F;&gt;
いい例かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;三年間jQueryだけを使っていたフロントエンドエンジニアとなると、&lt;br &#x2F;&gt;
現在ではかなり厳しい気がしますが、実務経験年数で言えば&lt;br &#x2F;&gt;
3年なので、足切りは免れるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そうなると、実務経験年数は、&lt;br &#x2F;&gt;
やはり信用ならないというのが無難な見方ではないでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;それに自社サービスは、&lt;br &#x2F;&gt;
コードがきれいなことも多く、&lt;br &#x2F;&gt;
プロダクトとしては成熟していることが多いので、&lt;br &#x2F;&gt;
スパゲッティコードへの免疫もつきにくい気もします。&lt;&#x2F;p&gt;
&lt;p&gt;メンテンスしやすいコードの保守開発を3年間やったのと、&lt;br &#x2F;&gt;
スパゲッティコードを1年間でなんとかメンテナンスできるレベルまで、&lt;br &#x2F;&gt;
リファクタリングしたのとでは、圧倒的に後者のほうが高いスキルが要求されるのに、&lt;br &#x2F;&gt;
前者のほうが転職市場では有利というのがやはり違和感があるところです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;madamadashao-naikodeingutesuto&quot;&gt;まだまだ少ないコーディングテスト&lt;&#x2F;h3&gt;
&lt;p&gt;結局のところ、&lt;br &#x2F;&gt;
無難にコーディングテストなどをするのが、&lt;br &#x2F;&gt;
一番不公平がないように思いますが、&lt;br &#x2F;&gt;
なんだかんだでまだまだ面接重視の企業が多い気もします。&lt;&#x2F;p&gt;
&lt;p&gt;個人的には、コーディングテストはそこまで得意じゃないので、&lt;br &#x2F;&gt;
これは嬉しいような気もしますが、&lt;br &#x2F;&gt;
エンジニア採用の歪さという観点では、&lt;br &#x2F;&gt;
コーディングテストをやらずに、実務経験年数で足切りをするのは、&lt;br &#x2F;&gt;
かなり歪だと感じます。&lt;&#x2F;p&gt;
&lt;p&gt;そういう意味では、私もどうせ落とされるなら、&lt;br &#x2F;&gt;
コーディングテストで落とされたいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;enzinianitotutenoli-xiang&quot;&gt;エンジニアにとっての理想&lt;&#x2F;h3&gt;
&lt;p&gt;ここからはあくまで私の理想でしかないですが、&lt;br &#x2F;&gt;
エンジニアが継続的に技術を高めていくには、&lt;br &#x2F;&gt;
下記に似た戦略を取る必要はあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;転職市場ではもてはやされる、自社サービス勤務のエンジニアは、&lt;br &#x2F;&gt;
エンジニアとして成長できているかという観点で言えば、&lt;br &#x2F;&gt;
必ずしもYesとは言えないでしょうから。&lt;&#x2F;p&gt;
&lt;p&gt;さて、エンジニアにとっての理想ですが、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;退職をしなくても様々な企業に在籍できること(現在での副業をもっと柔軟に適用されること)&lt;&#x2F;li&gt;
&lt;li&gt;自社サービス勤務は、技術を高めるという観点では、3 ~ 5年で転職するのが良いということ&lt;&#x2F;li&gt;
&lt;li&gt;実務経験年数ではなくて、何をやったかで技術力が評価されること&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;といった感じでしょうか。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-lun&quot;&gt;結論&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;結論、エンジニアの転職市場においては、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;必ずしもスキルが評価されるとは限らないということです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もし、ホワイトの企業でまったり経験を積める状態なのであれば、&lt;br &#x2F;&gt;
焦らず、そこで窓際族として経験年数を増やして行ったほうが、&lt;br &#x2F;&gt;
市場価値の高いエンジニアになれるということです(もちろん、これはものすごく歪ですが)&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアは、技術が好きで、休日も勉強している人が理想とかって言われがちですが、&lt;br &#x2F;&gt;
このような業界構造だと、窓際族で実務経験年数だけ増やして行ったほうが得なので、&lt;br &#x2F;&gt;
キャリアとしては、休日勉強するのはコスパが悪いということになりがちです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、私としては、このような歪な構造が撤廃されることを願っています。&lt;br &#x2F;&gt;
私と同様に業界の歪だと感じた方は、X（旧ツイッター)やSNSなどでシェアしてくださいますと嬉しいです。&lt;&#x2F;p&gt;
&lt;p&gt;Qiitaの方も見てくださいますと、&lt;br &#x2F;&gt;
嬉しいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Dockerコマンド】よく使うものpull image run execなど</title>
        <published>2023-08-11T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/docker-command/"/>
        <id>https://reisuta.com/docker-command/</id>
        
        <content type="html" xml:base="https://reisuta.com/docker-command/">&lt;p&gt;Dockerを使うには、&lt;br &#x2F;&gt;
Linuxと同様にいくつかの典型的なコマンドを使いこなす必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、種類が多いことから&lt;br &#x2F;&gt;
「どれがどれだったっけ？」ってなることもしばしば。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、&lt;strong&gt;とりあえずこれだけは知っておきたいDockerコマンドの紹介&lt;&#x2F;strong&gt;と&lt;strong&gt;解説&lt;&#x2F;strong&gt;をします。&lt;br &#x2F;&gt;
忘れてしまったときなど本記事を見返せば、&lt;br &#x2F;&gt;
思い出せるようにある種のチートシート的にも&lt;br &#x2F;&gt;
構成していますので、ぜひご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;また、本記事の内容は、&lt;br &#x2F;&gt;
下記動画でも視聴できるので、&lt;br &#x2F;&gt;
併せてご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;6YdlyEtDmHk&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;dockerkomandonoji-ben-gou-cheng&quot;&gt;Dockerコマンドの基本構成&lt;&#x2F;h2&gt;
&lt;p&gt;dockerのコマンドは、一般的には下記の書式に従って実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker コマンド オプション&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;前回の記事&lt;&#x2F;a&gt;で、「Dockerとは？」というDockerの基礎について触れたもので、&lt;br &#x2F;&gt;
runやstartなどが出てきたと思いますが、&lt;mark&gt;コマンドというのはこれらに該当します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;オプションというのは、docker runコマンドなどでいうと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;コンテナ名を指定する、--nameやポート番号を指定する-pなどが該当します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1077&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kontenaqi-dong-karazhong-liao-made&quot;&gt;コンテナ起動から終了まで&lt;&#x2F;h3&gt;
&lt;p&gt;コマンドの個別解説の前に、&lt;br &#x2F;&gt;
コンテナの起動から終了までのライフサイクルをまとめます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;前回の記事(上の参考リンクの記事です&lt;&#x2F;a&gt;)で登場した、&lt;br &#x2F;&gt;
docker runコマンドは、pull、create、startの３つのコマンドをまとめて実行するコマンドでもあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -dit --name sample -p 8080:80 -v &amp;quot;$PWD&amp;quot;:&#x2F;usr&#x2F;local&#x2F;apache2&#x2F;htdocs&#x2F; httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは下記と同様です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker pull httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker create --name sample -p 8080:80 -v &amp;quot;$PWD:&#x2F;usr&#x2F;local&#x2F;apache2&#x2F;htdocs&#x2F; httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker start sample&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;つまりdocker runコマンドの場合は、&lt;br &#x2F;&gt;
ローカルにイメージがなければリポジトリが持ってきて、&lt;br &#x2F;&gt;
作成、起動までやってくれるわけです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、リポジトリからイメージを持ってくるだけに留めたい場合は、&lt;br &#x2F;&gt;
上記で使っているdocker pullコマンドを使用します。&lt;&#x2F;p&gt;
&lt;p&gt;ローカルに何もイメージがない状態での&lt;br &#x2F;&gt;
大まかなライフサイクルをまとめると、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;pull(リポジトリからイメージを取得) → 作成 → 起動 → 停止 → 削除&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;という風になるのが一般的かと思います。&lt;br &#x2F;&gt;
（作成してimage削除とかもあったりするので、必ずしもこの限りではないですが、&lt;br &#x2F;&gt;
大まかな流れとしては上記のような感じです)&lt;&#x2F;p&gt;
&lt;p&gt;それでは次から、コマンドの個別解説に移りたいと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerkomandoshi-ifang&quot;&gt;Dockerコマンド使い方&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;docker-pull&quot;&gt;docker pull&lt;&#x2F;h3&gt;
&lt;p&gt;docker pullコマンドは、docker hubなどのレジストリから、&lt;br &#x2F;&gt;
イメージを取得するコマンドです。docker hubなどを見るとわかりやすいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ubuntu&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ubuntu&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ここで、下記のようなコマンドが記載されてあったと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker pull ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これはまさにubuntuというイメージを取得するコマンドですね。&lt;&#x2F;p&gt;
&lt;p&gt;イメージ名には、タグをつけることも可能です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;タグというのは、そのイメージの分類名のようなものを指しており、&lt;br &#x2F;&gt;
主にversionや安定版・開発版などを示したりするときに使われています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは例えばrubyイメージとかだとわかりやすいですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker pull ruby:3.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合は、rubyの3.0系を設定します。&lt;br &#x2F;&gt;
dockerのメリットとして、このようにプログラミング言語などの&lt;br &#x2F;&gt;
versionをコンテナごとに設定できるというのがあるので、&lt;br &#x2F;&gt;
tag設定はこういうときに便利ですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;slimtoalpine&quot;&gt;slimとalpine&lt;&#x2F;h4&gt;
&lt;p&gt;rubyなどのプログラミング言語のイメージのタグには、&lt;br &#x2F;&gt;
しばしば、こうしたslimやalpineというタグが存在します。&lt;&#x2F;p&gt;
&lt;p&gt;おそらく、プログラミング言語間で大きな差異はないかと思いますが、&lt;br &#x2F;&gt;
Rubyの場合で解説します。&lt;&#x2F;p&gt;
&lt;p&gt;slimは、公式では次のように説明されています。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;This image does not contain the common packages contained in the default tag and only contains the minimal packages needed to run ruby. Unless you are working in an environment where only the ruby image will be deployed and you have space constraints, we highly recommend using the default image of this repository.&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;最小限のパッケージしか入っていないので、&lt;br &#x2F;&gt;
容量などの制約が大きいなどの事情がなければ、&lt;br &#x2F;&gt;
そこまでおすすめはしないということですね。&lt;&#x2F;p&gt;
&lt;p&gt;slimを使わずとも、defaultのtagsの方がすんなり環境構築できるかと思いますし、&lt;br &#x2F;&gt;
ニーズがよくわからないときは、default(ruby:3.0みたいなもの)を使うことを&lt;br &#x2F;&gt;
公式も推奨していました。&lt;&#x2F;p&gt;
&lt;p&gt;なので、slimを使うのは軽量化したいというニーズがあることに加え、&lt;br &#x2F;&gt;
自分で必要なパッケージとかを見極められる場合になると思うので、&lt;br &#x2F;&gt;
割と上級者向けのタグですかね。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、alpineについては、次のように説明されています。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;This image is based on the popular Alpine Linux project, available in the alpine official image. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general.&lt;&#x2F;p&gt;
&lt;p&gt;This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use musl libc instead of glibc and friends, so software will often run into issues depending on the depth of their libc requirements&#x2F;assumptions. See this Hacker News comment thread for more discussion of the issues that might arise and some pro&#x2F;con comparisons of using Alpine-based images.&lt;&#x2F;p&gt;
&lt;p&gt;To minimize image size, it&#x27;s uncommon for additional related tools (such as git or bash) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the alpine image description for examples of how to install packages if you are unfamiliar).&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;これも、軽量系のタグで、Alpine Linuxという軽量のOSをベースにしているものです。&lt;br &#x2F;&gt;
なので、slimと同じく軽量化のニーズがある場合には有用かもしれませんが、&lt;br &#x2F;&gt;
musl libcというのを使っているようなので、それ関係の要件や依存関係に引っかかったりする懸念が&lt;br &#x2F;&gt;
あるようです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、そもそもベースが大きく異なるので、&lt;br &#x2F;&gt;
思わぬエラーに遭遇しがちだと思うので、ある程度慣れている人向けの印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;alpineを普段から使っている方であれば、&lt;br &#x2F;&gt;
slimよりもalpine系の方が良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;結論、軽量化したいニーズが強くなければ、&lt;br &#x2F;&gt;
これらのタグは選択しなくて大丈夫です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;latesttagu&quot;&gt;latestタグ&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;strong&gt;こちらのタグは最新版という意味で、&lt;br &#x2F;&gt;
タグ名を省略したときは、latestタグが設定されたものとして扱われます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;開発環境などでは、最新版を使うことに問題はないでしょうが、&lt;br &#x2F;&gt;
latestタグは頻繁に更新されるものなので、&lt;br &#x2F;&gt;
本番環境などでタグを指定しなかったりするのは、&lt;br &#x2F;&gt;
意図せずversionなどが変わってしまい、不具合の原因になるので、&lt;br &#x2F;&gt;
避けるのが無難です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-image&quot;&gt;docker image&lt;&#x2F;h3&gt;
&lt;p&gt;docker image系のコマンドは、&lt;br &#x2F;&gt;
イメージの管理を行うコマンドです。&lt;br &#x2F;&gt;
下位コマンドがいくつかあります。&lt;br &#x2F;&gt;
よく使うのだけ紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image&#x2F;&quot;&gt;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;docker-image-ls&quot;&gt;docker image ls&lt;&#x2F;h4&gt;
&lt;p&gt;これは、イメージの一覧を出力します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image_ls&#x2F;&quot;&gt;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image_ls&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;docker-image-prune&quot;&gt;docker image prune&lt;&#x2F;h4&gt;
&lt;p&gt;こちらは、使っていないイメージをまとめて削除してくれるコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image_prune&#x2F;&quot;&gt;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;image_prune&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;オプションが色々あり、&lt;br &#x2F;&gt;
何も設定しないと、確認のプロンプトが表示されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image prune&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-command&#x2F;Screenshot-2023-07-27-at-8.06.53.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プロンプトが不要であれば、&lt;br &#x2F;&gt;
-fオプションで表示させずに実行できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image prune -f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;--fileterオプションを指定すると、&lt;br &#x2F;&gt;
untilやlabelなどのフィルタリングを行うことができますが、&lt;br &#x2F;&gt;
やや高度で細かいので、untilなどで、特定の時刻前に生成されたイメージを削除するfilterを紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;まず、--formatオプションを使って、&lt;br &#x2F;&gt;
作成日時を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;--formatオプションは、&lt;br &#x2F;&gt;
Go言語のテンプレートを使って、&lt;br &#x2F;&gt;
色々操作できるオプションです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;config&#x2F;formatting.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;config&#x2F;formatting.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば下記で使われている、tableは、&lt;br &#x2F;&gt;
表示するフィールドを指定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker images --format &amp;#39;table {{&#x2F;*.Repository*&#x2F;}}\t{{&#x2F;*.Tag*&#x2F;}}\t{{&#x2F;*.ID*&#x2F;}}\t{{&#x2F;*.CreatedAt*&#x2F;}}\t{{&#x2F;*.Size*&#x2F;}}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そして、ここで表示されたCreatedAtを元に、&lt;br &#x2F;&gt;
いつ起点から削除したいか決めます。&lt;br &#x2F;&gt;
2020-09-12T03:23:27以前のイメージを消したければ、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image prune -a --force --filter &amp;quot;until=2020-09-12T03:23:27&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とする。&lt;&#x2F;p&gt;
&lt;p&gt;シンプルに10日以上(240h)前のイメージを消したければ、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image prune --filter &amp;quot;until=240h&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でも行えます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;docker-image-inspect&quot;&gt;docker image inspect&lt;&#x2F;h4&gt;
&lt;p&gt;これは、詳細情報を出力します。&lt;&#x2F;p&gt;
&lt;p&gt;詳細情報を知りたいイメージを一つか複数指定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image inspect vue-sigh-api vue-sigh-front&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記は、vue-sigh-apiというイメージとvue-sigh-frontというイメージの&lt;br &#x2F;&gt;
詳細情報を出力します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;docker-image-rm&quot;&gt;docker image rm&lt;&#x2F;h4&gt;
&lt;p&gt;こちらはシンプルに削除したいイメージを削除できるコマンドです。&lt;br &#x2F;&gt;
inspectと同様で、一つか複数指定できます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-run&quot;&gt;docker run&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、コンテナの作成から起動までやってくれる、&lt;br &#x2F;&gt;
いわゆる全部のせコマンドなので、&lt;br &#x2F;&gt;
docker createなどの単体作成コマンドよりも、&lt;br &#x2F;&gt;
圧倒的に使用頻度が高いです。&lt;&#x2F;p&gt;
&lt;p&gt;また、ローカルに存在しないイメージをrunした場合、&lt;br &#x2F;&gt;
リモートから取得してくれるので、pullに相当することもやってくれるので、&lt;br &#x2F;&gt;
まさに全部のせコマンドですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-command&#x2F;Screenshot-2023-07-27-at-8.50.24-1024x294.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;itopusiyon&quot;&gt;-itオプション&lt;&#x2F;h4&gt;
&lt;p&gt;runコマンドなので、よく見かける、&lt;br &#x2F;&gt;
-itオプションですが、&lt;br &#x2F;&gt;
これは、&lt;strong&gt;-iオプションと-tオプションを繋げて表現したものです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そうはいっても、それぞれを単体で使うことは&lt;br &#x2F;&gt;
あまりないので、実質-itオプションと思ってしまっても、&lt;br &#x2F;&gt;
そこまで差し支えないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ドキュメントでは、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;-it は疑似 TTY（pseudo-TTY）をコンテナの標準入力に接続するよう、 Docker に対して命令します。つまり、コンテナ内でインタラクティブな bash シェルを作成します。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;engine&#x2F;reference&#x2F;commandline&#x2F;run.html&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;と説明しています。&lt;&#x2F;p&gt;
&lt;p&gt;要するに、-itオプションを指定することで、&lt;br &#x2F;&gt;
dockerコンテナとhostのターミナルを繋げているようなイメージですね。&lt;&#x2F;p&gt;
&lt;p&gt;-itオプションを指定しないと、&lt;br &#x2F;&gt;
コンテナのシェルに接続できないので、&lt;br &#x2F;&gt;
statusはextiedになります。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、-iと-tの違いについては、&lt;br &#x2F;&gt;
下記の記事がわかりやすかったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;k_uchida_____&#x2F;items&#x2F;8ca31226bd6d10850791&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;k_uchida_____&#x2F;items&#x2F;8ca31226bd6d10850791&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rmopusiyon&quot;&gt;--rmオプション&lt;&#x2F;h4&gt;
&lt;p&gt;こちらもよく使うオプションで、&lt;br &#x2F;&gt;
runで起動するコンテナは一時的な用途が多いので、&lt;br &#x2F;&gt;
使わなくなったら、--rmオプションをしないと、&lt;br &#x2F;&gt;
どんどんコンテナが蓄積されていきます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、通常はこちらの--rmオプションを指定し、&lt;br &#x2F;&gt;
コンテナを削除したくないときだけ、&lt;br &#x2F;&gt;
オプションをつけないというふうにするといいと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kontenadesieruwoshi-xing-suru&quot;&gt;コンテナでシェルを実行する&lt;&#x2F;h2&gt;
&lt;p&gt;コンテナの中に入って、特定のコマンドを実行したりしたいとき、&lt;br &#x2F;&gt;
そのコンテナに対して、シェルを実行して、コンテナの中に入ることがよくあります。&lt;br &#x2F;&gt;
upしているコンテナに対して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -it&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; sample-container &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ctrl + p、Ctrl + qを続けて押すとでデタッチすることができます。&lt;br &#x2F;&gt;
シェルを終了するには、exitと入力します。&lt;&#x2F;p&gt;
&lt;p&gt;runでシェルを実行した場合、&lt;br &#x2F;&gt;
exitを入力すると、コンテナも停止しますが、&lt;br &#x2F;&gt;
execの場合、upのままです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的には、execですでに起動中のコンテナに対して、&lt;br &#x2F;&gt;
実行することがほとんどかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;基本的に、docker runは、停止中のコンテナに実行して、&lt;br &#x2F;&gt;
シェル終了時は、コンテナ終了するのに対して、&lt;br &#x2F;&gt;
docker execは、実行中のコンテナに実行して、&lt;br &#x2F;&gt;
シェル終了時は、コンテナは実行中のままという違いがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、Railsとかで開発をしている際に、&lt;br &#x2F;&gt;
使いたいコマンドは、&lt;br &#x2F;&gt;
このコンテナに対して実行するコマンドを使って実行するので、&lt;&#x2F;p&gt;
&lt;p&gt;例えば、rails db:migrateとかは、&lt;br &#x2F;&gt;
docker compose exec コンテナ名 rails db:migrateに変化します。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【未経験からエンジニア】プログラミングスクールおすすめ5選</title>
        <published>2023-07-29T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/programming-school/"/>
        <id>https://reisuta.com/programming-school/</id>
        
        <content type="html" xml:base="https://reisuta.com/programming-school/">&lt;h2 id=&quot;enzinianinaruniha&quot;&gt;エンジニアになるには？&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;エンジニア志望の人&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;エンジニアになるためにはプログラミングスクールに通ったほうがいいのだろうか&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;プログラミングは、専門性が高く自分一人で勉強するのが大変に感じることも多いですよね。&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では「おすすめのプログラミングスクール5選」を特徴と、&lt;br &#x2F;&gt;
現役エンジニア目線で優れているなと思う点を詳しくご紹介します。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;プログラミングの勉強法がわからない&lt;&#x2F;li&gt;
&lt;li&gt;そもそもPCスキルに自信がない&lt;&#x2F;li&gt;
&lt;li&gt;どうすればエンジニアになれるのかわからない&lt;&#x2F;li&gt;
&lt;li&gt;良いプログラミングスクールを知りたい&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;du-xue-deenzinianinareruka&quot;&gt;独学でエンジニアになれるか？&lt;&#x2F;h2&gt;
&lt;p&gt;まず、良くある話題として、&lt;br &#x2F;&gt;
プログラミングを独学で勉強するか否かですが、&lt;br &#x2F;&gt;
&lt;strong&gt;結論、独学でもプログラミングは勉強できますし、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;エンジニアになることも可能です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、独学の場合、&lt;br &#x2F;&gt;
勉強や戦略の立て方、転職まで、&lt;br &#x2F;&gt;
基本的に全て自分で考えて行い、&lt;br &#x2F;&gt;
自分で行動するしかないので、大変なことは間違いありません。&lt;&#x2F;p&gt;
&lt;p&gt;具体的に独学でプログラミングを勉強するには、&lt;br &#x2F;&gt;
下記のようなハードルがあります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;勉強する分野が広い&lt;&#x2F;li&gt;
&lt;li&gt;成果物を作る必要がある&lt;&#x2F;li&gt;
&lt;li&gt;プログラミングで詰まった際に自分で解決するしかない&lt;&#x2F;li&gt;
&lt;li&gt;勉強の方向性が正しいのかを確認する手段が少ない&lt;&#x2F;li&gt;
&lt;li&gt;最低限のセキュリティを知っておく必要がある&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;p&gt;そのため、プログラミングスクールに通ったほうが、&lt;br &#x2F;&gt;
最短ルートを行くことができるのは間違いないです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wei-jing-yan-karaenzinianinarutamenibi-yao-namian-qiang&quot;&gt;未経験からエンジニアになるために必要な勉強&lt;&#x2F;h2&gt;
&lt;p&gt;さて、未経験からエンジニアになるために必要な勉強ですが、まずここでは、未経験の定義を、&lt;br &#x2F;&gt;
「&lt;mark&gt;プログラミング以外のIT知識は最低限身についている(Googleのツールなどを問題なく使いこなせるなど)&lt;&#x2F;mark&gt;」&lt;br &#x2F;&gt;
イメージ像としては、大学時代にPCで授業を受けたり、レポートや重要な情報をPCで管理するなど、&lt;br &#x2F;&gt;
日常的に使いこなせている感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;その場合、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;HTML&#x2F;CSSの基礎(フロント志望ならCSSはやや応用まで）&lt;&#x2F;li&gt;
&lt;li&gt;Javascriptの基礎(フロント志望なら応用まで)&lt;&#x2F;li&gt;
&lt;li&gt;バックエンド言語一つのやや応用まで(フロント志望なら基礎まで、あるいはやらなくてもOK）&lt;&#x2F;li&gt;
&lt;li&gt;Linuxの基礎コマンド&lt;&#x2F;li&gt;
&lt;li&gt;Dockerの基礎&lt;&#x2F;li&gt;
&lt;li&gt;エディターを使いこなせる&lt;&#x2F;li&gt;
&lt;li&gt;Gitの基礎&lt;&#x2F;li&gt;
&lt;li&gt;SQLの基礎(バックエンド志望なら応用ぐらいまでやっておきたい）&lt;&#x2F;li&gt;
&lt;li&gt;ターミナルを使いこなせる&lt;&#x2F;li&gt;
&lt;li&gt;フレームワーク一つのやや応用まで&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;と言った感じです。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;うげぇ、めちゃくちゃたくさんあるじゃん！&lt;&#x2F;p&gt;
&lt;p&gt;って思った方がほとんどだと思いますが、&lt;br &#x2F;&gt;
正直な話、&lt;strong&gt;かなり厳選してこれです&lt;&#x2F;strong&gt;...&lt;&#x2F;p&gt;
&lt;p&gt;なので、ほんとうはもっとやっておいて欲しい分野もあります。&lt;br &#x2F;&gt;
あくまで上記はマストで、これに加えてやっておくと好ましいものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;一応、当ブログでも上記については、&lt;br &#x2F;&gt;
基本の記事やYouTube動画をあげていますので、&lt;br &#x2F;&gt;
これらの基本を勉強するなら、参考になるかと思うので、&lt;br &#x2F;&gt;
ご覧いただけると。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]フロントエンド(TypeScript) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]バックエンド(Ruby) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]Linux基礎コマンド [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]Docker基礎 [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]エディター(Vim) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]Git基礎 [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]ターミナル(Tmux) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]フロントエンドフレームワーク(Vue.js) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-div class=&quot;&quot; margin=&quot;0 0 -5px -5px&quot; padding=&quot;0 0 0 0&quot; add_style=&quot;&quot;][st-minihukidashi webicon=&quot;st-svg-check&quot; fontsize=&quot;&quot; fontweight=&quot;bold&quot; bgcolor=&quot;#FFECB3&quot; color=&quot;&quot; margin=&quot;0 0 0 0&quot; radius=&quot;30&quot; position=&quot;&quot; add_boxstyle=&quot;&quot;]バックエンドフレームワーク(Ruby on Rails) [&#x2F;st-div] &amp;gt;&lt;&#x2F;p&gt;
&lt;p&gt;メモ&lt;&#x2F;p&gt;
&lt;p&gt;※ 不足している分野は現在準備中です。今後の更新をお待ちいただけますと&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、最低限のPCリテラシーが自信がない人の場合、&lt;br &#x2F;&gt;
これに加えて、下記のようなことも勉強する必要があるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;必要なモノ&quot; webicon=&quot;st-svg-file-text-o&quot; color=&quot;#757575&quot; bordercolor=&quot;#f3f3f3&quot; bgcolor=&quot;&quot; borderwidth=&quot;3&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; title_bordercolor=&quot;#757575&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class st-title-under st-list-circle&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;タッチタイピングの習得&lt;&#x2F;li&gt;
&lt;li&gt;PCで情報を収集する習慣&lt;&#x2F;li&gt;
&lt;li&gt;Excelやスプレッドシートなど、世間的にやや使いこなすのが難しいツールが最低限使用できる&lt;&#x2F;li&gt;
&lt;li&gt;日常的に使うWeb&#x2F;ITツールが豊富にある&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;のような状態を目指すと良いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;意外と甘く見がちですが、&lt;br &#x2F;&gt;
&lt;strong&gt;そもそもPCの基本的なスキルが身についていないという人も少なくありません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こうしたスキルがないままプログラミングを始めても、&lt;br &#x2F;&gt;
挫折率を高めてしまうので、上記のスキルも疎かにしないようにしましょう。&lt;&#x2F;p&gt;
&lt;p&gt;とは言いつつもこのあたりは、&lt;br &#x2F;&gt;
しっかりやれば意外とすぐにできるようになるので、過度な心配は無用です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;du-xue-deenzinianinarunan-yi-du&quot;&gt;独学でエンジニアになる難易度&lt;&#x2F;h2&gt;
&lt;p&gt;上記のエンジニアのになるために必要な勉強をご覧になって&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;これぐらいなら楽勝だわ。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;楽勝とまでは行かないけど、しっかり勉強しておけば独学でも大丈夫そう&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;と感じた人は、&lt;br &#x2F;&gt;
&lt;strong&gt;プログラミングスクールは不要です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;というのも、プログラミングスクールの立ち位置的には、&lt;br &#x2F;&gt;
大学受験の予備校などと同じく、あくまでサポートをしてくれるということにあるので、&lt;br &#x2F;&gt;
&lt;mark&gt;自分ですべて進めることができる人には不要です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それに独学でエンジニアになった人のほうが、&lt;br &#x2F;&gt;
すべて自分で何とかするしかない環境上、&lt;br &#x2F;&gt;
自走力やエラー解決力が高い傾向にあるので、&lt;br &#x2F;&gt;
実務に出てからもギャップが少なくできるというメリットがあります。&lt;&#x2F;p&gt;
&lt;p&gt;それに面接などの際も、&lt;br &#x2F;&gt;
独学だと面接官などにも、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;この人は独学でプログラミングを勉強しているのか。自走力がありそうで良さそうだな。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;という印象を与えることができるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、&lt;mark&gt;&lt;strong&gt;独学でできるのであれば、&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;そちらに越したことはないです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、本記事のプログラミングスクールへの回答としては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;通わないで、エンジニアになれるのであればそちらに越したことはない&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;となります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そうはいっても&lt;br &#x2F;&gt;
現実問題そう簡単にはいかないことが多いので、&lt;br &#x2F;&gt;
プログラミングスクールが必要になってきたりします。&lt;&#x2F;p&gt;
&lt;p&gt;実は、プログラミングの挫折率は、&lt;br &#x2F;&gt;
約9割という統計も残っています。&lt;&#x2F;p&gt;
&lt;p&gt;・挫折率の統計記事&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;prtimes.jp&#x2F;main&#x2F;html&#x2F;rd&#x2F;p&#x2F;000000003.000047683.html&quot;&gt;https:&#x2F;&#x2F;prtimes.jp&#x2F;main&#x2F;html&#x2F;rd&#x2F;p&#x2F;000000003.000047683.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ここからも分かる通り、&lt;br &#x2F;&gt;
プログラミングの独学は&lt;strong&gt;かなり難易度が高いことがうかがえます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えるなら、大学受験の宅浪に近く、&lt;br &#x2F;&gt;
できるのであれば、それでもいいけど、&lt;br &#x2F;&gt;
本当にできるの？って首をかしげたくなるぐらい、&lt;br &#x2F;&gt;
根気と精神力がいる選択かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;未経験からエンジニアを目指す場合に、&lt;br &#x2F;&gt;
必要な勉強量は、個人差はありますが、&lt;br &#x2F;&gt;
およそ300時間ぐらいが目安とされています。&lt;&#x2F;p&gt;
&lt;p&gt;これらを踏まえると、独学に次のような壁があるのがわかります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;自力で300時間前後を勉強しなければ行けない壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;300時間で効率的に必要な勉強をinput&#x2F;outputしなければならない壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;上記の知識をもとに自力で成果物を作らなければならない壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;成果物作成の際に、遭遇したエラーなどを自力で解決しなければならない壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;これらを踏まえて戦略的に転職活動で内定を取得しなければならない壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;全てにおいてモチベーションを管理し続ける徹底的な自己管理能力についての壁&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;という感じになるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これらをすべてを踏まえて、&lt;br &#x2F;&gt;
独学でも大丈夫と思えた人は、&lt;br &#x2F;&gt;
問題ありません！独学でいきましょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、多くの人はそういう心境にはならなかったかと思うので、&lt;br &#x2F;&gt;
下記、プログラミングスクールについて紹介していきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;puroguramingusukuruosusume&quot;&gt;プログラミングスクールおすすめ&lt;&#x2F;h2&gt;
&lt;p&gt;さて、独学の難易度が凄まじいことをご紹介しましたが、&lt;br &#x2F;&gt;
プログラミングスクールに通うと、&lt;br &#x2F;&gt;
&lt;strong&gt;独学時の壁の多くが、ぐっと楽になります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、未経験からエンジニアを目指すのであれば、&lt;br &#x2F;&gt;
プログラミングスクールに通うのがおすすめではあります。&lt;&#x2F;p&gt;
&lt;p&gt;おすすめのプログラミングスクールをいくつかご紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dmm-webcamp&quot;&gt;DMM WEBCAMP&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098384&amp;amp;p_id=1363&amp;amp;pc_id=2297&amp;amp;pl_id=20505&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000020505.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;ポイント&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;転職成功率は98%とかなり高い&lt;&#x2F;li&gt;
&lt;li&gt;転職保証があるので、本気で転職したい人には特におすすめ&lt;&#x2F;li&gt;
&lt;li&gt;卒業生限定コミュニティがある&lt;&#x2F;li&gt;
&lt;li&gt;チーム開発やポートフォリオ作成がカリキュラムにある&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;良くも悪くも万人向けなので、尖っているものを求めている人には物足りないかも&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;DMM WEBCAMPは業界内でも有名なプログラミングスクールで、&lt;br &#x2F;&gt;
&lt;mark&gt;迷ったらここでOKとおすすめできるほど総合的に優れているプログラミングスクールだと感じます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その分、裏を返せば、尖っているものはそこまで多くないので、&lt;br &#x2F;&gt;
一般のプログラミングスクールとは一味違った体験を求めている人には不向きかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ただそれ以外は、&lt;mark&gt;ポートフォリオコードレビューや、チーム開発をはじめとして、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;質はかなり実践的だと感じます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、DMM WEBCAMPは、給付金制度の対象でもあるので、&lt;br &#x2F;&gt;
経済産業省・厚生労働省のお墨付きという点でもおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;「とにかくエンジニアになりたい！プログラミングスクールはどこでもいいよ」っていう人は、&lt;br &#x2F;&gt;
ここが一番合うかもしれません。&lt;&#x2F;p&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098384&amp;amp;p_id=1363&amp;amp;pc_id=2297&amp;amp;pl_id=20505&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000020505.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;uzuuzukaretuzi&quot;&gt;ウズウズカレッジ&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;px.a8.net&amp;#x2F;svt&amp;#x2F;ejp?a8mat=3TD7OP+4784FM+33T0+25FUNL&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;bgt.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;ポイント&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;就職定着率97%と高い&lt;&#x2F;li&gt;
&lt;li&gt;プログラミングスクールでは珍しいJavaに特化している&lt;&#x2F;li&gt;
&lt;li&gt;月額制サービスなので気軽に始めたりやめられる&lt;&#x2F;li&gt;
&lt;li&gt;Javaシルバー相当の知識を身につけられる&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Javaはいきなりやると挫折する可能性がある&lt;&#x2F;li&gt;
&lt;li&gt;eラーニングかつサブスク性で気軽な分、自走力もある程度必要&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;ウズウズカレッジは、Javaやネットワークなどが強い印象があり、&lt;br &#x2F;&gt;
堅実なプログラミングスキルを学ぶことができるのが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、Javaは未経験がいきなり学習する言語としては、&lt;br &#x2F;&gt;
やや難易度が高いため、人によっては挫折してしまう可能性は否定できません。&lt;&#x2F;p&gt;
&lt;p&gt;また、サブスクでeラーニングなので、申し込みの敷居は低い分、&lt;br &#x2F;&gt;
ある程度自分で学習を進めて行かなければならないので、&lt;br &#x2F;&gt;
自走力がある程度必要です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Javaは、&lt;mark&gt;静的型付け言語の代表選手であり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;王道言語の一つなので、Javaを習得することができるとかなり強みになると思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;特にWebエンジニアは、静的型付け言語に苦手意識を持っている人が多いので、&lt;br &#x2F;&gt;
最初にJavaでプログラミングの基礎を学習するのは大きな意味があると思いますし、&lt;br &#x2F;&gt;
長期的に見ると、キャリアの強みになると思います。&lt;&#x2F;p&gt;
&lt;p&gt;加えて、JavaはほかのPythonやRubyなどのWeb系言語に比べると、&lt;br &#x2F;&gt;
未経験にはややとっつきにくい or 地味というイメージをもたれがちな言語なので、&lt;br &#x2F;&gt;
ライバルがこれらに比べると少ないというメリットもあるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それに正直なところ、PythonやRubyなどに関しても、&lt;br &#x2F;&gt;
入り口がとっつきやすいだけで、実務で深く学んでいくと、&lt;br &#x2F;&gt;
結構難しい部分がたくさん出てくるので、結局最初に難しい部分に&lt;br &#x2F;&gt;
直面するかどうかの違いだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Javaの勉強はエンジニアにキャリアに大きくプラスに働くかと思うので、&lt;br &#x2F;&gt;
&lt;mark&gt;他の未経験と差をつけたいという方にはとてもおすすめです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;px.a8.net&amp;#x2F;svt&amp;#x2F;ejp?a8mat=3TD7OP+4784FM+33T0+25FUNL&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;7-bgt.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;techacademy&quot;&gt;TechAcademy&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098387&amp;amp;p_id=1555&amp;amp;pc_id=2816&amp;amp;pl_id=22760&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000022760.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098387&amp;amp;p_id=1555&amp;amp;pc_id=2816&amp;amp;pl_id=29834&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000029834.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;ポイント&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;業界内でも有名で安心&lt;&#x2F;li&gt;
&lt;li&gt;無料体験やカウンセリングなどが豊富にあるので、とりあえず話を聞くだけでもOK&lt;&#x2F;li&gt;
&lt;li&gt;副業体験コースなどもあり、多彩なので幅広い人におすすめできる&lt;&#x2F;li&gt;
&lt;li&gt;エンジニア転職保証コースは未経験から16週間でエンジニアとして就職するまでをサポートしてくれる神サービス&lt;&#x2F;li&gt;
&lt;li&gt;講師の質が高い(全員実務3年以上の現役エンジニア)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;コースがたくさんあるので、どれが自分に適しているか判断する必要がある&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;TechAcademyは、業界内でもおそらく一番有名なので、&lt;br &#x2F;&gt;
ご存知の方も多いかもしれませんが、それだけあって、&lt;br &#x2F;&gt;
万人におすすめできる、様々なコースやサポートなどが手厚いのが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;強いて難点を上げるとすれば、コースが色々ありすぎてどれにすればいいのか、&lt;br &#x2F;&gt;
迷ってしまうということでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;これに関しても、無料カウンセリングのときとかに、&lt;br &#x2F;&gt;
聞けばいいかなと思うので大きなデメリットではないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;必ずしもエンジニア志望ではない人も、&lt;br &#x2F;&gt;
web制作コースなどもあるので、様々なニーズに対応しています。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、未経験からエンジニアを目指している人向けには、&lt;br &#x2F;&gt;
&lt;mark&gt;エンジニア転職保証コースという、16週間でエンジニアとして就職するまでを徹底サポートしてくれるコースも&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;あるので、本気でエンジニアを目指したいという方には強くおすすめできます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=4098387&amp;amp;p_id=1555&amp;amp;pc_id=2816&amp;amp;pl_id=29834&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000029834.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;runteq&quot;&gt;RUNTEQ&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;px.a8.net&amp;#x2F;svt&amp;#x2F;ejp?a8mat=3TD7OP+47TK1E+4RCW+609HT&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;8-bgt.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;ポイント&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;数あるプログラミングスクールの中でもガチ感がある&lt;&#x2F;li&gt;
&lt;li&gt;プロダクト創造・企画といったマネジメントの視点があるスクールはかなり珍しい&lt;&#x2F;li&gt;
&lt;li&gt;卒業生の就職先がWeb系の自社開発企業といった高難易度の企業に就職している&lt;&#x2F;li&gt;
&lt;li&gt;卒業生のポートフォリオのクオリティーが未経験のレベルを超えている&lt;&#x2F;li&gt;
&lt;li&gt;プログラミング言語以外の重要な技術もカリキュラムに含まれている&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;実践的でレベルが高いので人によってはついていけない可能性がある&lt;&#x2F;li&gt;
&lt;li&gt;基本的にRuby on Railsのエンジニアになることが前提&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;RUNTEQは、一言で言うなら、&lt;br &#x2F;&gt;
&lt;mark&gt;一番現場感があるプログラミングスクールだと思います。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
カリキュラムも、プログラミング言語はもちろん、&lt;br &#x2F;&gt;
テストフレームワークの使い方、Docker、SQLなど、&lt;br &#x2F;&gt;
未経験者が見逃しがちな技術についてもしっかり触れているのが、特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、全くのプログラミング未経験(前提知識0)の状態だと、&lt;br &#x2F;&gt;
カリキュラムの内容についていけなくなるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、最低限本で軽く読むや調べたりすると良いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、RUNTEQで取り扱っている技術は、&lt;br &#x2F;&gt;
当ブログで扱っている技術と似ているものが多いので、&lt;br &#x2F;&gt;
不安であれば、下記のような記事を読んでから受講すると前提知識の不安は無くせると思います。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;692&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;179&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1077&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;また、RUNTEQは、特化している分、&lt;br &#x2F;&gt;
基本的にはRailsエンジニアになることを想定したカリキュラムになっているので、&lt;br &#x2F;&gt;
Javaエンジニアとか、PHPエンジニアのようなものを考えている人には合わないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、実務に入ってしまえばプログラミング言語の違いは些細なものなので、&lt;br &#x2F;&gt;
とりあえずエンジニアになってしまって、その後自分の使いたい言語の分野に転職するとかも可能なので、&lt;br &#x2F;&gt;
個人的にはそこまで大きなデメリットではないかなと思っています。&lt;&#x2F;p&gt;
&lt;p&gt;Railsは、初心者がWebのシステムを学ぶのには敷居が低く、情報量が多い上に、&lt;br &#x2F;&gt;
それでいて技術としての深みもある、素晴らしいフレームワークなので、&lt;br &#x2F;&gt;
初心者から上級者まで使っているWebフレームワークです。&lt;br &#x2F;&gt;
(Railsの学習を通して、GitやSQL、Dockerなども自然と学ぶことができます)&lt;&#x2F;p&gt;
&lt;p&gt;RUNTEQは、Railsだけではなく、こういった周辺技術もカリキュラムに含めているので、&lt;br &#x2F;&gt;
いわゆるRailsしかできないエンジニアになることを防いでくれますし、&lt;br &#x2F;&gt;
&lt;mark&gt;真に技術力があるエンジニア養成に寄与していると思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それに、テストフレームワークなどについては、独学ではまず&lt;br &#x2F;&gt;
勉強しない気がしますが、実務に出たらこれは必須のスキルなので、&lt;br &#x2F;&gt;
これをプログラミングスクールの学習のタイミングで学べるのは大変ありがたいですね。&lt;&#x2F;p&gt;
&lt;p&gt;また、卒業生のポートフォリオのクオリティーがものすごく高く、&lt;br &#x2F;&gt;
未経験者が作ったものとは思えないクオリティーです。&lt;&#x2F;p&gt;
&lt;p&gt;RUNTEQは、Ruby on Railsを中心に、エンジニアが実務で必要なスキルを洗い出し、&lt;br &#x2F;&gt;
それをカリキュラムに落とし込んでいるような印象を受けました。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、転職保証なども手厚く、&lt;br &#x2F;&gt;
卒業生も自社開発企業など、高難易度の企業に就職しているので、&lt;br &#x2F;&gt;
その点でも安心ですね。&lt;&#x2F;p&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;px.a8.net&amp;#x2F;svt&amp;#x2F;ejp?a8mat=3TD7OP+47TK1E+4RCW+609HT&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;9-bgt.gif&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;h3 id=&quot;railshack&quot;&gt;RailsHack&lt;&#x2F;h3&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=3897239&amp;amp;p_id=3031&amp;amp;pc_id=6991&amp;amp;pl_id=38557&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000038557.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;ポイント&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;圧倒的に安い(独学コースは21780円 2023年7月時点)&lt;&#x2F;li&gt;
&lt;li&gt;動画学習なので場所にとらわれず学べる&lt;&#x2F;li&gt;
&lt;li&gt;一度受講すれば、動画をずっと閲覧することができる&lt;&#x2F;li&gt;
&lt;li&gt;パソコンすら触ったことがない人でも大丈夫&lt;&#x2F;li&gt;
&lt;li&gt;簡単なWebアプリを作成できる&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[st-mybox title=&quot;微妙な点&quot; webicon=&quot;st-svg-exclamation-circle&quot; color=&quot;#ef5350&quot; bordercolor=&quot;#f3f3f3&quot; bgcolor=&quot;#ffebee&quot; borderwidth=&quot;&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; title_bordercolor=&quot;#ef5350&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class st-title-under&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ある程度の自走力が必要&lt;&#x2F;li&gt;
&lt;li&gt;やや使用技術が古い&lt;&#x2F;li&gt;
&lt;li&gt;GitやSQLなどがカリキュラムに含まれていない&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;こちらは、上記の4つに比べると、&lt;br &#x2F;&gt;
ややマイナーですが、&lt;mark&gt;圧倒的に安く、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Railsを中心としたプログラミング講座を提供しております。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;しかし、動画教材なので、基本的には自分で進める必要があり、&lt;br &#x2F;&gt;
ある程度の自走力が求められます。&lt;&#x2F;p&gt;
&lt;p&gt;また、Bootstrap4やVagrantなどは、&lt;br &#x2F;&gt;
やや使用技術としては古いかなと個人的には感じたので、&lt;br &#x2F;&gt;
モダンな技術を使いたい人には合わないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;けれども、未経験の段階などでは、必ずしもモダンな技術を勉強したほうが良いとも限らないので、&lt;br &#x2F;&gt;
Bootstrap4やVagrantのように、ある程度枯れた技術を勉強したほうが、&lt;br &#x2F;&gt;
最新の情報に振り回されないので、学習しやすいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;それに、技術の流行り廃りは、常に起きていますが、&lt;br &#x2F;&gt;
技術自体の内容が大幅に変わっていることはそこまで多くないため、&lt;br &#x2F;&gt;
Bootstrap4やVagrantなどで、デザインフレームワークの基礎や、仮想化の基礎を学ぶのは、&lt;br &#x2F;&gt;
有用だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;GitとSQLがカリキュラムに含まれていないのは、&lt;br &#x2F;&gt;
ちょっと物足りないかなと思うので、これらについては、&lt;br &#x2F;&gt;
本などで別途学習する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;当ブログでも&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;git-github&#x2F;&quot;&gt;これらについて&lt;&#x2F;a&gt;、&lt;br &#x2F;&gt;
記事を上げているので、よければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;179&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ここの強みは、他のプログラミングスクールは、たいてい最低限のPCリテラシーを求めることがほとんどなのに対し、&lt;br &#x2F;&gt;
&lt;mark&gt;パソコンすら触ったことがない人でも大丈夫としているのが特徴です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;意外とありそうでない特徴なので、&lt;br &#x2F;&gt;
本当にPCに苦手意識があるけど、エンジニアになりたいという人にはおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;それでいて、ベテラン講師にチャットやメールサポートもありますので、&lt;br &#x2F;&gt;
スクールに費用をかけたくないという人には一番おすすめできます。&lt;&#x2F;p&gt;


&lt;a class=&quot;afl-banner&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;af.moshimo.com&amp;#x2F;af&amp;#x2F;c&amp;#x2F;click?a_id=3897239&amp;amp;p_id=3031&amp;amp;pc_id=6991&amp;amp;pl_id=38554&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;
  &lt;img src=&quot;000000038554.jpg&quot; alt=&quot;&quot; loading=&quot;lazy&quot;&gt;
&lt;&#x2F;a&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;817&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【技術書マニア厳選】エンジニア必読、技術書おすすめ26選</title>
        <published>2023-07-29T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/technical-book/"/>
        <id>https://reisuta.com/technical-book/</id>
        
        <content type="html" xml:base="https://reisuta.com/technical-book/">&lt;h2 id=&quot;enzinianiosusumenoji-shu-shu&quot;&gt;エンジニアにおすすめの技術書&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;これだけは読んでおきたい技術書ってどういうのがあるのだろう&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;書籍学習は、エンジニアの嗜みみたいなところがありますが、
良書というものは、意外とそこまで多くもありません。&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では「技術書マニアの筆者が厳選した技術書20選」を特徴と、 おすすめポイントなどを紹介します。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]
おすすめの技術書が知りたい
どういう本を読むべきなのかが知りたい
書籍学習で強強エンジニアになりたい
[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;本記事のの内容は、下記の動画で
触れております。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;7-9Qz0sA68s&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;webji-shu-gai-yao&quot;&gt;Web技術概要&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;webwozhi-eruji-shu&quot;&gt;Webを支える技術&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774142043.jpg&quot; alt=&quot;Webを支える技術 HTTP、URI、HTML、そしてREST （WEB＋DB press plusシリーズ） [ 山本陽平 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Webを支える技術 HTTP、URI、HTML、そしてREST （WEB＋DB press plusシリーズ） [ 山本陽平 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Web%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93%20HTTP%E3%80%81URI%E3%80%81HTML%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6REST%20%EF%BC%88WEB%EF%BC%8BDB%20press%20plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%89%20%5B%20%E5%B1%B1%E6%9C%AC%E9%99%BD%E5%B9%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;6385779&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;一冊目は、「Webを支える技術」です。
こちらは、結構有名な本なのでご存知の方も多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちょっと古い本というのが難点ではありますが、
Web技術の概要を学ぶなら、真っ先に思いつくのはこの本ですね。&lt;&#x2F;p&gt;
&lt;p&gt;Webの歴史や、REST、URI設計、HTTP、ステータスコード、リソース設計など、&lt;&#x2F;p&gt;
&lt;p&gt;Railsとかを使っていると、出てくるWeb技術の基本をしっかり学ぶことができます。&lt;&#x2F;p&gt;
&lt;p&gt;プログラミングを始めたてのときは、こういう本の重要性があまり感じ取れないかもしれませんが、
慣れてくると、こういう普遍的な本のありがたみが身にしみるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;まだ読んでいないという方は、必ず読んでほしいとおすすめできるぐらいの良書です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;基本的な技術書は読んだけどこの本はまだ読んでいない人&lt;&#x2F;li&gt;
&lt;li&gt;Web技術の概要をもう一度おさらいしたい人&lt;&#x2F;li&gt;
&lt;li&gt;Webに関わるエンジニアで、まだ読んでいない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;web-api-the-good-parts&quot;&gt;Web API The Good Parts&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873116860.jpg&quot; alt=&quot;Web　API：The　Good　Parts [ 水野貴明 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Web　API：The　Good　Parts [ 水野貴明 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Web%E3%80%80API%EF%BC%9AThe%E3%80%80Good%E3%80%80Parts%20%5B%20%E6%B0%B4%E9%87%8E%E8%B2%B4%E6%98%8E%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;13028363&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらも定番ですが、オライリーのAPIの設計についての本です。
昨今は、プログラミングをするエンジニアであれば、
ほとんどのエンジニアがAPIに関わると思うので、
バックエンドエンジニア以外も読んでおいて損はないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それとこの本は、そこそこの企業の面接とかだと、
読んでいるのが当たり前で話が進むので、
読んでいないとそれだけで出遅れるので、
まだ読んでいない人は、ぜひとも読みましょう。&lt;&#x2F;p&gt;
&lt;p&gt;エンドポイントやレスポンスデータの設計など、&lt;&#x2F;p&gt;
&lt;p&gt;意外と見落としがちなAPI設計の基本を学べます。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;バックエンドエンジニアでまだ読んでいない人&lt;&#x2F;li&gt;
&lt;li&gt;バックエンドエンジニア以外でもAPIに関わることが多い人&lt;&#x2F;li&gt;
&lt;li&gt;自身のAPI設計に自信がない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;sohutoueaakitekutiyanoji-chu-enziniaringuniji-dukuti-xi-de-apuroti&quot;&gt;ソフトウェアアーキテクチャの基礎 エンジニアリングに基づく体系的アプローチ&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119823_1_3.jpg&quot; alt=&quot;ソフトウェアアーキテクチャの基礎 エンジニアリングに基づく体系的アプローチ [ Mark Richards ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;ソフトウェアアーキテクチャの基礎 エンジニアリングに基づく体系的アプローチ [ Mark Richards ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3%E3%81%AE%E5%9F%BA%E7%A4%8E%20%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E5%9F%BA%E3%81%A5%E3%81%8F%E4%BD%93%E7%B3%BB%E7%9A%84%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81%20%5B%20Mark%20Richards%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17029495&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらは、アーキテクトを目指す人、現役アーキテクト向けの本ではあるのですが、&lt;&#x2F;p&gt;
&lt;p&gt;ソフトウェア開発の本質や、様々なアーキテクチャーについても学べる&lt;&#x2F;p&gt;
&lt;p&gt;ので、
手を動かすエンジニアにもおすすめできる本です。&lt;&#x2F;p&gt;
&lt;p&gt;将来的にCTOを目指している人や、技術でマネジメントするような立ち位置を目指している人には、
刺さる本かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;やや分厚くて、読むのが一苦労ではありますが、
実務経験が2年以上ある方は、読んでみても良いのではないかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;アーキテクチャーに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;技術寄りのマネジメントに興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;実務経験が2年以上ある人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;hurontoendo&quot;&gt;フロントエンド&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;javascript-di-7ban&quot;&gt;JavaScript 第7版&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119700_1_3.jpg&quot; alt=&quot;JavaScript 第7版 [ David Flanagan ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;JavaScript 第7版 [ David Flanagan ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=JavaScript%20%E7%AC%AC7%E7%89%88%20%5B%20David%20Flanagan%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16917876&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;通称サイ本と呼ばれている、
JavaScriptの定番書籍です。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptの書籍はたくさんありますが、
どれも内容が基礎的だったりして、実務に堪えうるレベルのものはそこまで多くありません。&lt;&#x2F;p&gt;
&lt;p&gt;それにJavaScriptの場合、&lt;&#x2F;p&gt;
&lt;p&gt;MDN&lt;&#x2F;p&gt;
&lt;p&gt;が最強すぎるため、
本などは不要と考えている方も多いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そんな中でも、このサイ本はおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;このサイ本は、他の本に比べても実践的であり、応用レベルまでJavaScriptを学ぶことができるので、&lt;&#x2F;p&gt;
&lt;p&gt;実務でJavaScriptを書いている人などには、ぜひとも読んでほしい本です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、分厚いので、読むのはやや根気がいるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;JavaScriptを実務で使っているエンジニアの人&lt;&#x2F;li&gt;
&lt;li&gt;JavaScriptを強みにしていきたい人&lt;&#x2F;li&gt;
&lt;li&gt;JavaScriptを体系的に学びたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;purowomu-zhi-suren-notamenotypescriptru-men-an-quan-nakodonoshu-kifang-karagao-du-naxing-noshi-ifang-made&quot;&gt;プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297127473_1_3.jpg&quot; alt=&quot;プロを目指す人のためのTypeScript入門　安全なコードの書き方から高度な型の使い方まで [ 鈴木 僚太 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プロを目指す人のためのTypeScript入門　安全なコードの書き方から高度な型の使い方まで [ 鈴木 僚太 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AETypeScript%E5%85%A5%E9%96%80%E3%80%80%E5%AE%89%E5%85%A8%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%8B%E3%82%89%E9%AB%98%E5%BA%A6%E3%81%AA%E5%9E%8B%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%BE%E3%81%A7%20%5B%20%E9%88%B4%E6%9C%A8%20%E5%83%9A%E5%A4%AA%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17075427&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちら通称ベリー本と言われている、
TypeScriptの入門書です。&lt;&#x2F;p&gt;
&lt;p&gt;非常にわかりやすいにもかかわらず、内容は実践的なので、&lt;&#x2F;p&gt;
&lt;p&gt;筆者も何度も読んで参考にした本です。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの学習をするのであれば、
第一におすすめしたい本です。&lt;&#x2F;p&gt;
&lt;p&gt;昨今は、フロントエンドといえば、
TypeScriptという流れになってきているので、
遅かれ早かれ学ぶ必要は出てくる気はします。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、私のブログでも、&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの文法&lt;&#x2F;p&gt;
&lt;p&gt;については、
いくつか取り上げているので、
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;TypeScriptを学習しようと思っている人&lt;&#x2F;li&gt;
&lt;li&gt;フロントエンドを極めたいと思っている人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;batukuendo&quot;&gt;バックエンド&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;purowomu-zhi-suren-notamenorubyru-men-yan-yu-shi-yang-karatesutoqu-dong-kai-fa-debatuguji-fa-made&quot;&gt;プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297124373_1_5.jpg&quot; alt=&quot;プロを目指す人のためのRuby入門［改訂2版］　言語仕様からテスト駆動開発・デバッグ技法まで [ 伊藤 淳一 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プロを目指す人のためのRuby入門［改訂2版］　言語仕様からテスト駆動開発・デバッグ技法まで [ 伊藤 淳一 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80%EF%BC%BB%E6%94%B9%E8%A8%822%E7%89%88%EF%BC%BD%E3%80%80%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7%20%5B%20%E4%BC%8A%E8%97%A4%20%E6%B7%B3%E4%B8%80%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16908719&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらRuby界隈では非常に有名な書籍で、
通称チェリー本と呼ばれています。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの基本はもちろん、&lt;&#x2F;p&gt;
&lt;p&gt;ブロックや正規表現など、応用的なトピックも、&lt;&#x2F;p&gt;
&lt;p&gt;サンプルを通じてわかりやすく解説されていて、&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの入門書の中では、最もおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rubyをはじめから丁寧に学習したい人&lt;&#x2F;li&gt;
&lt;li&gt;現役Rubyエンジニアだけど、もう一度基本から学び直したい人&lt;&#x2F;li&gt;
&lt;li&gt;基礎だけでなく応用も学習したい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;obuziekutozhi-xiang-she-ji-shi-jian-gaido-rubydewakarujin-hua-situdukerurou-ruan-naapurikesiyon&quot;&gt;オブジェクト指向設計実践ガイド Rubyでわかる進化しつづける柔軟なアプリケーション&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774183619.jpg&quot; alt=&quot;オブジェクト指向設計実践ガイド Rubyでわかる進化しつづける柔軟なアプリケーショ [ サンディ・メッツ ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;オブジェクト指向設計実践ガイド Rubyでわかる進化しつづける柔軟なアプリケーショ [ サンディ・メッツ ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%20Ruby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%20%5B%20%E3%82%B5%E3%83%B3%E3%83%87%E3%82%A3%E3%83%BB%E3%83%A1%E3%83%83%E3%83%84%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;14383504&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、他の書籍と比べると、
ややマイナーかもしれませんが、個人的には結構イチオシの技術書です。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、Rubyでオブジェクト指向の威力を体験できる本というのは、
私が知る限り、これしかないからです。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクト指向設計の基本はもちろん、単一責任クラス、依存関係の認識、&lt;&#x2F;p&gt;
&lt;p&gt;ダックタイピングなど、高度なプログラミング技法を学ぶことができます。&lt;&#x2F;p&gt;
&lt;p&gt;そこそこ難しい本なので、初心者にはおすすめしにくいですが、
すでに結構Rubyを使っていて、さらなる高みを目指したい人、
元々Java出身の人がRubyを使う場合などに読むと、
Rubyとオブジェクト指向の関係性を掴むことができるので、
良いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私のブログでも&lt;&#x2F;p&gt;
&lt;p&gt;こちらの記事&lt;&#x2F;p&gt;
&lt;p&gt;で、
似たようなことを取り上げていますので、
よろしければ、ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;オブジェクト指向に基づいたコードを書けるようになりたい人&lt;&#x2F;li&gt;
&lt;li&gt;Rubyを極めたい人&lt;&#x2F;li&gt;
&lt;li&gt;変更に強いコードを書けるようにレベルアップしたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;rubyji-shu-zhe-ren-ding-shi-yan-he-ge-jiao-ben&quot;&gt;Ruby技術者認定試験合格教本&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000005457734.jpg&quot; alt=&quot;［改訂2版］Ruby技術者認定試験合格教本（Silver&amp;#x2F;Gold対応）Ruby公式資格教科書【電子書籍】[ 牧俊男（著） ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;［改訂2版］Ruby技術者認定試験合格教本（Silver&amp;#x2F;Gold対応）Ruby公式資格教科書【電子書籍】[ 牧俊男（著） ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%EF%BC%BB%E6%94%B9%E8%A8%822%E7%89%88%EF%BC%BDRuby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%90%88%E6%A0%BC%E6%95%99%E6%9C%AC%EF%BC%88Silver%2FGold%E5%AF%BE%E5%BF%9C%EF%BC%89Ruby%E5%85%AC%E5%BC%8F%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20%E7%89%A7%E4%BF%8A%E7%94%B7%EF%BC%88%E8%91%97%EF%BC%89%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;8e2166693a8d39de8574ee3dba3c114b&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;お次は、ちょっと変化球です。
Ruby Silver &#x2F; Ruby Goldの参考書です。&lt;&#x2F;p&gt;
&lt;p&gt;[st-cmemo webicon=&quot;st-svg-user&quot; iconcolor=&quot;#42A5F5&quot; bgcolor=&quot;#E3F2FD&quot; color=&quot;#000000&quot; iconsize=&quot;200&quot;] いや、資格試験に興味ないわ&lt;&#x2F;p&gt;
&lt;p&gt;って思った方も多いかもしれませんが、&lt;&#x2F;p&gt;
&lt;p&gt;この本は、シンプルにRubyの技術書として見てもかなり優秀です。&lt;&#x2F;p&gt;
&lt;p&gt;メソッドの基本、ブロックの基本など、
Rubyの癖がある部分と、強みなどをしっかり解説している本は、
意外とありそうでありません。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby自体を体系的に学ぶという観点でみれば、
この参考書が一番適しているかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;実際、筆者もこの書籍でRuby Silverの勉強をさせられましたが
（会社から強制に受験させれれました...)、
Rubyに対する理解が深まったなと強く実感しています。&lt;&#x2F;p&gt;
&lt;p&gt;資格試験は役に立たないと言われがちですが、&lt;&#x2F;p&gt;
&lt;p&gt;この参考書を丹念に読み込んだおかげで、かなりRubyに対して、&lt;&#x2F;p&gt;
&lt;p&gt;理解が深まったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、別に試験を受けない人にもおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rubyを体系的に学習したい人&lt;&#x2F;li&gt;
&lt;li&gt;ついでに資格も取得したい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;metapuroguraminguruby&quot;&gt;メタプログラミングRuby&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873117430.jpg&quot; alt=&quot;メタプログラミングRuby第2版 [ パオロ・ペロッタ ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;メタプログラミングRuby第2版 [ パオロ・ペロッタ ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0Ruby%E7%AC%AC2%E7%89%88%20%5B%20%E3%83%91%E3%82%AA%E3%83%AD%E3%83%BB%E3%83%9A%E3%83%AD%E3%83%83%E3%82%BF%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;13433676&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、あまり有名じゃないかもしれませんが、
個人的にはかなりイチオシです。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、この本を読んで、&lt;&#x2F;p&gt;
&lt;p&gt;私はRubyに対する印象が大きく変わりましたので、&lt;&#x2F;p&gt;
&lt;p&gt;ある種のブレイクスルーになったなと思っております。&lt;&#x2F;p&gt;
&lt;p&gt;元々私は、そこまでRubyという言語に愛着があったわけではなかったのですが、&lt;&#x2F;p&gt;
&lt;p&gt;この本を読んでRubyの威力に魅了され、すごい言語だなと感動しました。&lt;&#x2F;p&gt;
&lt;p&gt;なので、Rubyを極めたいと思っている人はもちろん、
どこかRubyは、他の言語より劣っているイメージを持っている方などには、
特に読んでもらいたい本です。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Rubyを極めたい人&lt;&#x2F;li&gt;
&lt;li&gt;Rubyをイケてない言語だと思っている人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;pahuekuto-ruby-on-rails&quot;&gt;パーフェクト Ruby on Rails&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;パーフェクト Ruby on Rails　【増補改訂版】 [ すがわらまさのり／前島真一 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%20Ruby%20on%20Rails%E3%80%80%E3%80%90%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88%E3%80%91%20%5B%20%E3%81%99%E3%81%8C%E3%82%8F%E3%82%89%E3%81%BE%E3%81%95%E3%81%AE%E3%82%8A%EF%BC%8F%E5%89%8D%E5%B3%B6%E7%9C%9F%E4%B8%80%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16352336&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Railsを学ぶとなったら、様々な手段がありますが、
やはり一度は書籍で体系的に学んでおきたいと思うところ。&lt;&#x2F;p&gt;
&lt;p&gt;その書籍の中で、この本が個人的には一番オススメです。&lt;&#x2F;p&gt;
&lt;p&gt;Rspecや、concern、Dockerでの環境構築など、&lt;&#x2F;p&gt;
&lt;p&gt;実務に出たら当たり前に使うけど、意外と体系的に説明していない部分について、&lt;&#x2F;p&gt;
&lt;p&gt;解説している本&lt;&#x2F;p&gt;
&lt;p&gt;なので、既にRailsをある程度使っている人でも参考になる部分があるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Ruby on Railsを学習している人&lt;&#x2F;li&gt;
&lt;li&gt;現役Railsエンジニアの人&lt;&#x2F;li&gt;
&lt;li&gt;Ruby on Railsを学習したい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ru-men-python3&quot;&gt;入門Python3&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873119328.jpg&quot; alt=&quot;入門Python3　第2版 [ Bill Lubanovic ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;入門Python3　第2版 [ Bill Lubanovic ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%85%A5%E9%96%80Python3%E3%80%80%E7%AC%AC2%E7%89%88%20%5B%20Bill%20Lubanovic%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16627214&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Pythonの本は、星の数ほどありますが、
実務向けで実践的な本は正直あまりない印象です。&lt;&#x2F;p&gt;
&lt;p&gt;Pythonは、どういうわけか初心者が好きな言語のようなので、
必然的に書籍も初心者向けのものが多くなっているのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、かくいう私も独学のときは、
初心者らしくPythonばかり勉強していましたので、気持ちはめちゃくちゃわかります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、それなりにPythonの本も読んで来ましたが、&lt;&#x2F;p&gt;
&lt;p&gt;その中で、易しすぎず難しすぎずで、ちょうど良い難易度で、&lt;&#x2F;p&gt;
&lt;p&gt;程よく実践的な書籍がこの本です。&lt;&#x2F;p&gt;
&lt;p&gt;安心のオライリーですね。Pythonの本は、
難しいやつだと、機械学習とかコンピューターサイエンスが普通に出てくるので、
難しい本と易しい本の差が激しい気がします。&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、この本が最も万人におすすめできる技術書かなと思います。
ただ、既に実務でバリバリPythonを使っている人には物足りない気もするので、
やはり入門とタイトルにある通り、初級者向けかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Pythonを学ぼうと思っている人&lt;&#x2F;li&gt;
&lt;li&gt;既にPythonを学習しているけど、Pythonの実務経験がない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;qi-dukebapurobing-miphp&quot;&gt;気づけばプロ並みPHP&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784865940657.jpg&quot; alt=&quot;気づけばプロ並みPHP 改訂版ーーゼロから作れる人になる！ [ 谷藤賢一 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;気づけばプロ並みPHP 改訂版ーーゼロから作れる人になる！ [ 谷藤賢一 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E6%B0%97%E3%81%A5%E3%81%91%E3%81%B0%E3%83%97%E3%83%AD%E4%B8%A6%E3%81%BFPHP%20%E6%94%B9%E8%A8%82%E7%89%88%E3%83%BC%E3%83%BC%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8C%E3%82%8B%E4%BA%BA%E3%81%AB%E3%81%AA%E3%82%8B%EF%BC%81%20%5B%20%E8%B0%B7%E8%97%A4%E8%B3%A2%E4%B8%80%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;14651781&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;全体的に骨太な本が続いたので、
ちょっと休憩入れます。&lt;&#x2F;p&gt;
&lt;p&gt;この本は、本記事で紹介している本の中で最も易しいです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、対象読者としては、他の技術書が難しすぎて挫折してしまった人です。&lt;&#x2F;p&gt;
&lt;p&gt;主にプログラミング経験が少なかったり、実務未経験のエンジニア志望向けの人向けの本です。&lt;&#x2F;p&gt;
&lt;p&gt;私も独学時代様々な技術書に手を出したのですが、
やはり実務未経験かつ、手探りでプログラミングを勉強しているので、
本格的な技術書は難しすぎて読めませんでした...&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、この本と出会って、初めて読了して、理解できたという感覚を味わうことが
できました。&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;&#x2F;p&gt;
&lt;p&gt;この本は、昔の私のように、普通の技術書で挫折してしまって、&lt;&#x2F;p&gt;
&lt;p&gt;どうしたらいいのかわからない人に送りたい本です。&lt;&#x2F;p&gt;
&lt;p&gt;この本を挟めば、読めなかった技術書もだんだん理解できるようになっていきます。
作者の谷藤さんの語り口は、本当にわかりやすいので、
技術書へのとっつきにくさがだいぶ減ると思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;実務未経験、プログラミング経験が少ない人&lt;&#x2F;li&gt;
&lt;li&gt;他の技術書が難しすぎて挫折した経験がある人&lt;&#x2F;li&gt;
&lt;li&gt;なんでもいいから、技術書を理解できるようになりたい&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;ikinarihazimeruphp-wakuwaku-dokidokinoru-men-jiao-shi&quot;&gt;いきなりはじめるPHP ワクワク・ドキドキの入門教室&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784897978857.jpg&quot; alt=&quot;いきなりはじめるPHP ワクワク・ドキドキの入門教室 [ 谷藤賢一 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;いきなりはじめるPHP ワクワク・ドキドキの入門教室 [ 谷藤賢一 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%81%84%E3%81%8D%E3%81%AA%E3%82%8A%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BPHP%20%E3%83%AF%E3%82%AF%E3%83%AF%E3%82%AF%E3%83%BB%E3%83%89%E3%82%AD%E3%83%89%E3%82%AD%E3%81%AE%E5%85%A5%E9%96%80%E6%95%99%E5%AE%A4%20%5B%20%E8%B0%B7%E8%97%A4%E8%B3%A2%E4%B8%80%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;11470071&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;blockquote&gt;
&lt;p&gt;ここだけの話、「気づけばプロ並みPHP」でも難しくて挫折してしまった。もう向いていないのかな。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;と思っている方も、&lt;br &#x2F;&gt;
もしかしたらいるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;この本は、そんな人向けの本です。&lt;&#x2F;p&gt;
&lt;p&gt;「気づけばプロ並みPHP」よりも更に易しい技術書です。&lt;br &#x2F;&gt;
お恥ずかしい話、私も独学時代は、上記の「気づけばプロ並みPHP」はやや難しいと感じました...笑&lt;&#x2F;p&gt;
&lt;p&gt;なので、先にこちらを読んでから、もう一度「気づけばプロ並みPHP」を読んで&lt;br &#x2F;&gt;
理解できるようになりました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;この本は、本当にわかりやすいかつ易しい技術書が良い人向けの本です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;「気づけばプロ並みPHP」も難しいと感じた人&lt;&#x2F;li&gt;
&lt;li&gt;PC操作からちょっと怪しい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;db-detabesu-sql&quot;&gt;DB（データベース)・SQL&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;sutukiriwakarusqlru-men&quot;&gt;スッキリわかるSQL入門&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;スッキリわかるSQL入門 第3版 ドリル256問付き！ （スッキリわかる入門シリーズ） [ 中山 清喬 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80%20%E7%AC%AC3%E7%89%88%20%E3%83%89%E3%83%AA%E3%83%AB256%E5%95%8F%E4%BB%98%E3%81%8D%EF%BC%81%20%EF%BC%88%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%89%20%5B%20%E4%B8%AD%E5%B1%B1%20%E6%B8%85%E5%96%AC%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17018590&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これも有名な本なので、
「知ってるよ！」っていう方がほとんどだと思いますが、
一応紹介しておきます。&lt;&#x2F;p&gt;
&lt;p&gt;基本的なSQLの文法を学ぶなら、&lt;&#x2F;p&gt;
&lt;p&gt;やはりこの本が一番おすすめですね。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;初めから丁寧にSQLを学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;SQLを書けるようになりたい人&lt;&#x2F;li&gt;
&lt;li&gt;SQLの復習がしたい現役エンジニア&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;da-ren-nixue-budbshe-ji-che-di-zhi-nan-shu-chu-ji-zhe-dezhong-waritakunaianatahe&quot;&gt;達人に学ぶDB設計徹底指南書 初級者で終わりたくないあなたへ&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798124704.jpg&quot; alt=&quot;達人に学ぶDB設計徹底指南書 初級者で終わりたくないあなたへ [ ミック ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;達人に学ぶDB設計徹底指南書 初級者で終わりたくないあなたへ [ ミック ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6DB%E8%A8%AD%E8%A8%88%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8%20%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8%20%5B%20%E3%83%9F%E3%83%83%E3%82%AF%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;11582464&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これも定番ですね。
DB設計の本って、そこまで多くないのですが、
その割に実務で求められる能力なので、
体系的に学べる本は非常にありがたいですね。&lt;&#x2F;p&gt;
&lt;p&gt;この本は、バックエンドエンジニアなら必読ですね。&lt;&#x2F;p&gt;
&lt;p&gt;まだ読んでいない人は、読みましょう。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;DB設計の本を探している人&lt;&#x2F;li&gt;
&lt;li&gt;DBエンジニア、バックエンドエンジニアでまだ読んでいない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;da-ren-nixue-busqlche-di-zhi-nan-shu&quot;&gt;達人に学ぶSQL徹底指南書&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798157825.jpg&quot; alt=&quot;達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ （CodeZine BOOKS） [ ミック ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ （CodeZine BOOKS） [ ミック ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6SQL%E5%BE%B9%E5%BA%95%E6%8C%87%E5%8D%97%E6%9B%B8%20%E7%AC%AC2%E7%89%88%20%E5%88%9D%E7%B4%9A%E8%80%85%E3%81%A7%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%82%E3%81%AA%E3%81%9F%E3%81%B8%20%EF%BC%88CodeZine%20BOOKS%EF%BC%89%20%5B%20%E3%83%9F%E3%83%83%E3%82%AF%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15596931&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;これも有名かつ定番ですね。
もちろん、ぜひとも読んでおきたい本ですが、
個人的には、上記のDB設計のほうが優先度は高いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;あと、全体的にまあまあ応用なので、
さきに「 スッキリわかるSQL入門」などで、
基礎を学んでおく必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;最近は、ORMでDBを操作することがほとんどな気もするので、
ここまで高度なSQLが求められるかというと微妙なラインかなとも思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、現役エンジニアの中でも、&lt;&#x2F;p&gt;
&lt;p&gt;生のSQLを書く機会が多い人や、&lt;&#x2F;p&gt;
&lt;p&gt;ORMでは表現できないクエリーを実現したい人などに刺さる本かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;生のSQLを書くことが多い現役エンジニア&lt;&#x2F;li&gt;
&lt;li&gt;SQLを極めたい人&lt;&#x2F;li&gt;
&lt;li&gt;DBエンジニアなど&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;sqlantipatan&quot;&gt;SQLアンチパターン&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873115894.jpg&quot; alt=&quot;SQLアンチパターン [ Bill Karwin ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;SQLアンチパターン [ Bill Karwin ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=SQL%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%20%5B%20Bill%20Karwin%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;12185610&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;はい、またまた定番ですね！
（DB系は流行り廃りがあまりないので、
書籍も定番ばかりになってしまう...)&lt;&#x2F;p&gt;
&lt;p&gt;これは、タイトルの通りアンチパターンを紹介している本で、&lt;&#x2F;p&gt;
&lt;p&gt;DB設計に関わる人や、SQLを頻繁に書く人は、ぜひとも読んでおきたい本ですね。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;基本は習得しているバックエンドエンジニア&lt;&#x2F;li&gt;
&lt;li&gt;DB設計をする機会が多い人&lt;&#x2F;li&gt;
&lt;li&gt;SQLを極めたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;shi-jian-redisru-men-ji-shu-noshi-zu-mikaraxian-chang-nohuo-yong-made&quot;&gt;実践Redis入門 技術の仕組みから現場の活用まで&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297131425_1_2.jpg&quot; alt=&quot;実践Redis入門 技術の仕組みから現場の活用まで [ 林 昌吾 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;実践Redis入門 技術の仕組みから現場の活用まで [ 林 昌吾 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%AE%9F%E8%B7%B5Redis%E5%85%A5%E9%96%80%20%E6%8A%80%E8%A1%93%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%8B%E3%82%89%E7%8F%BE%E5%A0%B4%E3%81%AE%E6%B4%BB%E7%94%A8%E3%81%BE%E3%81%A7%20%5B%20%E6%9E%97%20%E6%98%8C%E5%90%BE%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17323593&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Redisは、最近結構使われている技術な割に、
書籍があまりないのですが、
この本は、そんなRedisについて詳しくとりあげた本です。&lt;&#x2F;p&gt;
&lt;p&gt;「これでもか！」 ってぐらい、&lt;&#x2F;p&gt;
&lt;p&gt;Redisについて特化して詳しく書かれているので、&lt;&#x2F;p&gt;
&lt;p&gt;Redisに焦点を当てて学びたい人にはおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1019&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Redisを体系的に学びたい人&lt;&#x2F;li&gt;
&lt;li&gt;Redisを実務で使っている人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;linux&quot;&gt;Linux&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;linuxjiao-ke-shu-lpicreberu1-version5-0dui-ying&quot;&gt;Linux教科書 LPICレベル1 version5.0対応&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798160498.jpg&quot; alt=&quot;Linux教科書 LPICレベル1 Version5.0対応 （EXAMPRESS） [ 中島 能和 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Linux教科書 LPICレベル1 Version5.0対応 （EXAMPRESS） [ 中島 能和 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Linux%E6%95%99%E7%A7%91%E6%9B%B8%20LPIC%E3%83%AC%E3%83%99%E3%83%AB1%20Version5.0%E5%AF%BE%E5%BF%9C%20%EF%BC%88EXAMPRESS%EF%BC%89%20%5B%20%E4%B8%AD%E5%B3%B6%20%E8%83%BD%E5%92%8C%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15831915&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;またまた変化球で恐縮ですが、
Linuxで一番オススメな書籍は、LPICレベル1という資格試験の教科書です。&lt;&#x2F;p&gt;
&lt;p&gt;「また資格かよ」って感じだと思いますが、&lt;&#x2F;p&gt;
&lt;p&gt;資格は受けなくていいから、この本は買ってほしいと思えるぐらいおすすめの本です。&lt;&#x2F;p&gt;
&lt;p&gt;Linuxコマンドの基礎がこの一冊で学ぶことができます。
LPICレベル2などもありますが、&lt;&#x2F;p&gt;
&lt;p&gt;実務で使うLinuxコマンドの7割以上は、このLPICレベル1でカバーされています。&lt;&#x2F;p&gt;
&lt;p&gt;そして、解説も一つ一つ丁寧に行われているので、
わかりやすいです。&lt;&#x2F;p&gt;
&lt;p&gt;筆者もたまに復習がてら開くことがあります。
こういう資格の本って意外と馬鹿にできなかったりするんですよね。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Linuxコマンドを1から体系的に学習したい人&lt;&#x2F;li&gt;
&lt;li&gt;ついでにLPICレベル1も取得したい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;1ri-1wen-ban-nian-yi-nei-nixi-de-sieru-wanraina160ben-notuku&quot;&gt;1日1問、半年以内に習得　シェル・ワンライナー160本ノック&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297122676_1_2.jpg&quot; alt=&quot;1日1問、半年以内に習得　シェル・ワンライナー160本ノック [ 上田 隆一 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;1日1問、半年以内に習得　シェル・ワンライナー160本ノック [ 上田 隆一 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=1%E6%97%A51%E5%95%8F%E3%80%81%E5%8D%8A%E5%B9%B4%E4%BB%A5%E5%86%85%E3%81%AB%E7%BF%92%E5%BE%97%E3%80%80%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%BB%E3%83%AF%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%8A%E3%83%BC160%E6%9C%AC%E3%83%8E%E3%83%83%E3%82%AF%20%5B%20%E4%B8%8A%E7%94%B0%20%E9%9A%86%E4%B8%80%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16835064&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;この本は、正確にはシェルワンライナーの本なので、
Linuxの本というわけではないのですが、
シェルワンライナーの学習を通して、自然とLinuxへの理解を深めることができます。&lt;&#x2F;p&gt;
&lt;p&gt;それと、本のタイトル的にあまり実践的ではないような気もしますが、&lt;&#x2F;p&gt;
&lt;p&gt;内容は結構高度で、いわゆるシェル芸というものを学ぶことができます。&lt;&#x2F;p&gt;
&lt;p&gt;マストで学ばなければならない事項ではありませんが、
やっておくとエンジニアとしての幅をつけられるので、
個人的には結構おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;シェル芸に興味がある人&lt;&#x2F;li&gt;
&lt;li&gt;ちょっとコアなコマンドを知りたい人&lt;&#x2F;li&gt;
&lt;li&gt;普通の技術書が飽きた人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;git&quot;&gt;Git&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;du-xi-git&quot;&gt;独習Git&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798144610.jpg&quot; alt=&quot;独習Git [ リック・ウマリ ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;独習Git [ リック・ウマリ ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E7%8B%AC%E7%BF%92Git%20%5B%20%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A6%E3%83%9E%E3%83%AA%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;13592765&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらは、意外とみんな軽視しているGitについて、&lt;br &#x2F;&gt;
詳しく解説した本です。&lt;&#x2F;p&gt;
&lt;p&gt;Gitは、とりあえず使うレベルであれば、&lt;br &#x2F;&gt;
専門書など読まなくてもいいのですが、&lt;br &#x2F;&gt;
長くエンジニアを続けていくことを考えると、&lt;br &#x2F;&gt;
どこかのタイミングで、こういった専門書を読んで、&lt;br &#x2F;&gt;
体系的に学んだ方が良いなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;git-github&#x2F;&quot;&gt;【Git&#x2F;Githubを0から使えるレベルまで】概念と基本コマンド解説&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Gitを体系的に学び直したい人&lt;&#x2F;li&gt;
&lt;li&gt;Gitにいまいち自信がない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;docker&quot;&gt;Docker&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;sawatutexue-bukuraudoinhura-dockerji-chu-karanokontenagou-zhu&quot;&gt;さわって学ぶクラウドインフラ docker基礎からのコンテナ構築&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784296106424.jpg&quot; alt=&quot;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築 [ 大澤 文孝 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築 [ 大澤 文孝 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%81%95%E3%82%8F%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%80%80docker%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89%20%5B%20%E5%A4%A7%E6%BE%A4%20%E6%96%87%E5%AD%9D%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16350772&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;こちらは、Dockerの入門書で、&lt;br &#x2F;&gt;
基礎から詳しく解説しているので、&lt;br &#x2F;&gt;
これからDockerを学ぶ人には、おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、既にまあまあdockerを使いこなしている人には、&lt;br &#x2F;&gt;
やや物足りなく感じるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dockerを基礎からわかりやすく学習したい人&lt;&#x2F;li&gt;
&lt;li&gt;Dockerをとりあえず使えるようになりたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;puroguraminguzuo-fa-si-xiang&quot;&gt;プログラミング作法・思想&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;ridaburukodo&quot;&gt;リーダブルコード&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784873115658_1_2.jpg&quot; alt=&quot;リーダブルコード より良いコードを書くためのシンプルで実践的なテクニ （Theory　in　practice） [ ダスティン・ボズウェル ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;リーダブルコード より良いコードを書くためのシンプルで実践的なテクニ （Theory　in　practice） [ ダスティン・ボズウェル ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89%20%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%20%EF%BC%88Theory%E3%80%80in%E3%80%80practice%EF%BC%89%20%5B%20%E3%83%80%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%83%BB%E3%83%9C%E3%82%BA%E3%82%A6%E3%82%A7%E3%83%AB%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;11753651&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;まあ、これはみなさんご存知ですよね。
というくらい有名かつ定番の本です。&lt;&#x2F;p&gt;
&lt;p&gt;よく先輩エンジニアが後輩エンジニアにおすすめする本の筆頭が
この本ですね。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、たしかに多くの人に支持されているベストセラーだけあって、&lt;&#x2F;p&gt;
&lt;p&gt;書いてあることは本質的なので、まだ読んでいない人は、&lt;&#x2F;p&gt;
&lt;p&gt;読んだ方が良いかとも思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、個人的には書いてあることが、
当たり前すぎるなとは思います。&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、その当たり前のことも、&lt;&#x2F;p&gt;
&lt;p&gt;いつしか疎かにしていってしまうのが、&lt;&#x2F;p&gt;
&lt;p&gt;人間なので、定期的に読み返して、&lt;&#x2F;p&gt;
&lt;p&gt;「自分はエンジニアとして堕落していないか」と&lt;&#x2F;p&gt;
&lt;p&gt;自問自答する本としては良いなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;読んでいない人は読んだほうが良い気がします（熱烈信者から低評価をされないためにも)&lt;&#x2F;li&gt;
&lt;li&gt;この手のプログラミング作法系の本をまだ読んだことがない人&lt;&#x2F;li&gt;
&lt;li&gt;これからエンジニアになる人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;purinsipuru-obu-puroguramingu-3nian-mu-madenishen-nituketai-yi-sheng-yi-li-tu101noyuan-li-yuan-ze&quot;&gt;プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784798046143.jpg&quot; alt=&quot;プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則 3年目までに身につけたい　一生役立つ101の原理原則 [ 上田　勲 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則 3年目までに身につけたい　一生役立つ101の原理原則 [ 上田　勲 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%97%E3%83%AB%20%E3%82%AA%E3%83%96%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%203%E5%B9%B4%E7%9B%AE%E3%81%BE%E3%81%A7%E3%81%AB%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%81%9F%E3%81%84%20%E4%B8%80%E7%94%9F%E5%BD%B9%E7%AB%8B%E3%81%A4101%E3%81%AE%E5%8E%9F%E7%90%86%E5%8E%9F%E5%89%87%203%E5%B9%B4%E7%9B%AE%E3%81%BE%E3%81%A7%E3%81%AB%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%81%9F%E3%81%84%E3%80%80%E4%B8%80%E7%94%9F%E5%BD%B9%E7%AB%8B%E3%81%A4101%E3%81%AE%E5%8E%9F%E7%90%86%E5%8E%9F%E5%89%87%20%5B%20%E4%B8%8A%E7%94%B0%E3%80%80%E5%8B%B2%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;13785106&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;プログラミング作法の本は、ともすると軽視されがちですが、
割りと重要ですよね。&lt;&#x2F;p&gt;
&lt;p&gt;上記のリーダブルコードなどがこの手の本では有名ですが、&lt;&#x2F;p&gt;
&lt;p&gt;個人的には、リーダブルコードより、こちらの方がおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;プログラミングの基本を身につけたい人&lt;&#x2F;li&gt;
&lt;li&gt;リーダブルコードがピンと来なかった人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;unixtoiukao-efang-sonoshe-ji-si-xiang-tozhe-xue&quot;&gt;UNIXという考え方 その設計思想と哲学&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;27406406.jpg&quot; alt=&quot;UNIXという考え方 その設計思想と哲学 [ マイク・ギャンカーズ ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;UNIXという考え方 その設計思想と哲学 [ マイク・ギャンカーズ ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=UNIX%E3%81%A8%E3%81%84%E3%81%86%E8%80%83%E3%81%88%E6%96%B9%20%E3%81%9D%E3%81%AE%E8%A8%AD%E8%A8%88%E6%80%9D%E6%83%B3%E3%81%A8%E5%93%B2%E5%AD%A6%20%5B%20%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%BB%E3%82%AE%E3%83%A3%E3%83%B3%E3%82%AB%E3%83%BC%E3%82%BA%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;1319019&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;個人的には、この手の思想本の中では、&lt;br &#x2F;&gt;
これが一番好きです。&lt;&#x2F;p&gt;
&lt;p&gt;この本で書かれているUNIX哲学や考え方は、&lt;br &#x2F;&gt;
プログラミングにも役立つものも多いです。&lt;&#x2F;p&gt;
&lt;p&gt;また、哲学や思想がきれいにまとまっていて、&lt;br &#x2F;&gt;
見やすく、座右の銘のように参照できるので、&lt;br &#x2F;&gt;
自身のエンジニアとしての心構えみたいなものに応用できるかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、若干偏りがある本のような気もするので、&lt;br &#x2F;&gt;
完全に鵜呑みにするというよりは、&lt;br &#x2F;&gt;
こういう思想はたしかに役に立つなみたいな感じで読むと面白いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そういう意味では、他の思想本を読んで、&lt;br &#x2F;&gt;
ある程度一般的なプログラミング作法を理解している人向けかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;哲学や思想が好き&lt;&#x2F;li&gt;
&lt;li&gt;UNIXが好き&lt;&#x2F;li&gt;
&lt;li&gt;通常の作法本は飽きた&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;da-ren-purogurama-di-2ban-shou-da-nixiang-ketaanatanolv&quot;&gt;達人プログラマー（第2版） 熟達に向けたあなたの旅&lt;&#x2F;h3&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784274226298.jpg&quot; alt=&quot;達人プログラマー（第2版） 熟達に向けたあなたの旅 [ Andrew Hunt ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;達人プログラマー（第2版） 熟達に向けたあなたの旅 [ Andrew Hunt ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%EF%BC%88%E7%AC%AC2%E7%89%88%EF%BC%89%20%E7%86%9F%E9%81%94%E3%81%AB%E5%90%91%E3%81%91%E3%81%9F%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E6%97%85%20%5B%20Andrew%20Hunt%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16481114&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;個人的には、この手の思想本の中では、&lt;br &#x2F;&gt;
この本が一番参考になるかつ、一番難しいなと感じました。&lt;&#x2F;p&gt;
&lt;p&gt;その分、より実践的な内容を学ぶことができるので、&lt;br &#x2F;&gt;
リーダブルコードとかは当たり前すぎるよっていう人などに&lt;br &#x2F;&gt;
おすすめしたいです。&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;骨太な作法本を知りたい&lt;&#x2F;li&gt;
&lt;li&gt;リーダブルコードは当たり前すぎる&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ji-shu-shu-maniaitiosinoben-owarini&quot;&gt;技術書マニアイチオシの本(おわりに)&lt;&#x2F;h2&gt;
&lt;p&gt;さて、長々と紹介してきましたが、
ここで紹介しようか迷った本もたくさんありました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、それらの本は、内容が薄かったり、
ネットで調べたらすぐにわかるようなことをくどくどと書いていたりと、
書籍で読む必要性があまりないなと感じたものがほとんどだったので、
ここでは紹介しませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、&lt;&#x2F;p&gt;
&lt;p&gt;本記事で紹介した技術書は、&lt;&#x2F;p&gt;
&lt;p&gt;かなり厳選したつもりですので、&lt;&#x2F;p&gt;
&lt;p&gt;ぜひともご参考にしていただけると嬉しいです。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1139&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Dockerとは何か？概要を完全解説 簡単なWebサーバー構築で基礎を学ぶ</title>
        <published>2023-07-21T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/docker-basic/"/>
        <id>https://reisuta.com/docker-basic/</id>
        
        <content type="html" xml:base="https://reisuta.com/docker-basic/">&lt;h2 id=&quot;dockertoha&quot;&gt;Dockerとは？&lt;&#x2F;h2&gt;
&lt;p&gt;Dockerは、コンテナ型仮想環境を作成するソフトウェアの一種で、&lt;br &#x2F;&gt;
隔離された実行環境を用意することが特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;docker&#x2F;&quot;&gt;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;docker&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コンテナ型仮想環境を作成するソフトウェアは、&lt;br &#x2F;&gt;
Docker以外にも色々あり、例えばPodmanなどがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;podman.io&#x2F;&quot;&gt;https:&#x2F;&#x2F;podman.io&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、そんな中でも&lt;mark&gt;Dockerの人気度は群を抜いており、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;事実上のデファクトスタンダードになっているという感じですね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Webの開発においても、&lt;br &#x2F;&gt;
Dockerで環境構築することがほとんどで、&lt;br &#x2F;&gt;
本ブログでも&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;rails-new&#x2F;&quot;&gt;そのような記事&lt;&#x2F;a&gt;をいくつか公開しています。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerには、いくつかの用語が登場しますが、それぞれ解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kontenatoha&quot;&gt;コンテナとは？&lt;&#x2F;h3&gt;
&lt;p&gt;コンテナとは、独立した実行環境のことを指します。&lt;br &#x2F;&gt;
よく日常生活でもコンテナを見かけたりすると思いますが、&lt;br &#x2F;&gt;
わりとあのイメージと類似しており、隔離された閉じられた空間という特徴があります。&lt;&#x2F;p&gt;
&lt;p&gt;Dockerを使う際、&lt;mark&gt;Dockerをインストールしている、ホストOSに該当するPCとは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;異なる環境（異なるOSを入れたり)を立ち上げることができ、その環境が、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;コンテナに該当します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、ホストOSがMac OSで、コンテナの中のOSがLinuxというように、&lt;br &#x2F;&gt;
Dockerも仮想化の一種なので、コンテナという独自空間を使って、&lt;br &#x2F;&gt;
仮想環境を構築するようなイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;ホストOS、すなわち普段使用しているPCの環境とは、&lt;br &#x2F;&gt;
別の環境をコンテナによって手軽に構築できるので、&lt;br &#x2F;&gt;
Dockerの大きな魅力ですね。&lt;&#x2F;p&gt;
&lt;p&gt;そして、そうして構築されたDocker環境は、&lt;br &#x2F;&gt;
基本的に他の人のPC上でも動作することが想定されています。&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、コンテナはそれ自体独立しているので、&lt;br &#x2F;&gt;
ホストOSのアプリケーションに依存して動くということが、&lt;br &#x2F;&gt;
基本起こらないので、どのPCで実行しても動くことが想定されているという感じです。&lt;br &#x2F;&gt;
(まれにカーネル周りで、違いが生じると動かなかったりする場合もあるので、&lt;br &#x2F;&gt;
そういう場合は、それぞれの依存性を確認する必要があります。)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、&lt;strong&gt;Dockerはチーム開発での共通した環境構築をしやすいというメリットがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;imezitoha&quot;&gt;イメージとは？&lt;&#x2F;h3&gt;
&lt;p&gt;コンテナが独立した環境ということは既に紹介しましたが、&lt;br &#x2F;&gt;
そうなると、コンテナごとに個別の環境を構築する手間が生じます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、gitやcurlのように基本的にどのような環境においても、&lt;br &#x2F;&gt;
インストールしておきたいソフトウェアが存在するため、いちいちこれらを&lt;br &#x2F;&gt;
インストールするのは面倒です。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、&lt;mark&gt;予めこういった必要なソフトウェアなどをインストールしてある、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;コンテナの元のようなものが存在しており、これのことをイメージといいます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
テンプレートみたいなものですね。&lt;&#x2F;p&gt;
&lt;p&gt;このイメージは、Docker Hubというサイトで見ることができます。&lt;br &#x2F;&gt;
下記は、Rubyのイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;ruby&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;イメージには、オフィシャルイメージとそれ以外がありますが、&lt;br &#x2F;&gt;
可能であれば、オフィシャルイメージを使いましょう。&lt;br &#x2F;&gt;
こちらの方が、セキュリティアップデートが行われたりと、&lt;br &#x2F;&gt;
メンテナンスが格段にしっかりしているかと思われるので。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;docker-hub&#x2F;official_images&#x2F;&quot;&gt;https:&#x2F;&#x2F;matsuand.github.io&#x2F;docs.docker.jp.onthefly&#x2F;docker-hub&#x2F;official_images&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-engine&quot;&gt;Docker Engine&lt;&#x2F;h3&gt;
&lt;p&gt;Docker Engineとはなにかというと、&lt;br &#x2F;&gt;
ドキュメントに次のように定義されていました。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;軽量かつ強力なオープンソースによりコンテナ化（containerization）を行う技術。アプリケーションの構築とコンテナ化を行うワークフローを実現します。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;engine&#x2F;index.html&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;要は、Docker Engineによって、&lt;br &#x2F;&gt;
コンテナとかを実行できるようになるという感じで、&lt;br &#x2F;&gt;
このDocker Engineが入っているコンピューターを&lt;br &#x2F;&gt;
Dockerホストと言ったりします。&lt;&#x2F;p&gt;
&lt;p&gt;文字通り、エンジンのようなものと思っていただけたら問題ないかと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;docker-desktop&quot;&gt;Docker Desktop&lt;&#x2F;h2&gt;
&lt;p&gt;早速、Dockerの環境構築を行います。&lt;br &#x2F;&gt;
Dockerを使用する際、このDocker Desktopというソフトウェアを使用すると、&lt;br &#x2F;&gt;
簡単なので、こちらを使います。&lt;br &#x2F;&gt;
(Docker Desktopを使わずにdocker engineやcliなどをインストールする方法も&lt;br &#x2F;&gt;
ありますが、Docker Desktopをインストールしたほうが格段に簡単なので、こちらのほうがいいかと&lt;br &#x2F;&gt;
思います。Docker DesktopにDocker Engineやcliなども含まれています。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.docker.com&#x2F;products&#x2F;docker-desktop&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.docker.com&#x2F;products&#x2F;docker-desktop&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;desktop&#x2F;index.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;desktop&#x2F;index.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それぞれのOSにあった、Docker Desktopをインストールしてください。&lt;br &#x2F;&gt;
インストールできたら、Docker Desktopを起動しておいてください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerdewebsabawogou-zhu-sitemiru&quot;&gt;DockerでWebサーバーを構築してみる&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;qi-dong&quot;&gt;起動&lt;&#x2F;h3&gt;
&lt;p&gt;さて、長々と解説が続いたので、&lt;br &#x2F;&gt;
そろそろハンズオンに移りたいと思います。&lt;br &#x2F;&gt;
手始めに、Apacheのイメージを使って構築してみたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Docker hubのイメージは、&lt;br &#x2F;&gt;
こちらです。公式イメージです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;httpd&quot;&gt;https:&#x2F;&#x2F;hub.docker.com&#x2F;_&#x2F;httpd&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Dockerfileを使うやり方と使わないやり方がありますが、&lt;br &#x2F;&gt;
今回は、Dockerfileなしの、下記のコマンドでさくっと起動してしまいます。&lt;br &#x2F;&gt;
（実際の開発では99%Dockerfileを使うかと思うので、あくまでこれは簡易的な&lt;br &#x2F;&gt;
デモンストレーションと思っていただければです)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker run -dit --name my-apache-app -p 8080:80 -v &amp;quot;$PWD&amp;quot;:&#x2F;usr&#x2F;local&#x2F;apache2&#x2F;htdocs&#x2F; httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、こちらを実行したら、&lt;br &#x2F;&gt;
もう立ち上がっているかと思います。プロセスを確認するには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker ps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;Screenshot-2023-07-21-at-7.58.44-1024x73.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;STATUSがUpと表示されているので、&lt;br &#x2F;&gt;
稼働中です。&lt;&#x2F;p&gt;
&lt;p&gt;さて、試しに&lt;br &#x2F;&gt;
http:&#x2F;&#x2F;localhost:8080&#x2F;を確認すると、&lt;br &#x2F;&gt;
ファイルの一覧を確認できるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;私がホームディレクトリに設置したコールドリーディング用の&lt;br &#x2F;&gt;
フォルダにアクセスしてみます。（各々の環境で試す場合は、&lt;br &#x2F;&gt;
シンプルにlocalhost:8080でホームディレクトリが確認できます)&lt;&#x2F;p&gt;
&lt;p&gt;表示されているのは、Dockerホストのカレントディレクトリですね。&lt;&#x2F;p&gt;
&lt;p&gt;さて、このままだと見栄えが悪いので、&lt;br &#x2F;&gt;
index.htmlを作成して、そちらが表示されるようにします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;hello docker&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こちらを保存したら、&lt;br &#x2F;&gt;
今回は、http:&#x2F;&#x2F;localhost:8080を見てみます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;Screenshot-2023-07-21-at-8.10.10.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;index.htmlの内容が表示されていますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ting-zhi&quot;&gt;停止&lt;&#x2F;h3&gt;
&lt;p&gt;さて、コンテナを起動して&lt;br &#x2F;&gt;
index.htmlの内容を表示できたので、&lt;br &#x2F;&gt;
ものすごく簡単ではありますが、&lt;br &#x2F;&gt;
一応Dockerを使って、Webサーバーを構築したかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので停止します。&lt;br &#x2F;&gt;
停止のコマンドは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker stop my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;my-apache-appは、runのときの--nameオプションで指定したコンテナ名ですね。&lt;br &#x2F;&gt;
docker stopコマンドはコンテナ名のほかに、コンテナIDでも停止することができます。&lt;&#x2F;p&gt;
&lt;p&gt;docker psコマンドを使うと、&lt;br &#x2F;&gt;
プロセスが消えていることがわかると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、docker psコマンドに-aオプションを付けると、&lt;br &#x2F;&gt;
稼働中ではないすべてのコンテナを表示するので、&lt;br &#x2F;&gt;
残っていることが確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;Screenshot-2023-07-21-at-8.16.33-1024x45.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;StatusはExitedに変わっていますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zai-kai&quot;&gt;再開&lt;&#x2F;h3&gt;
&lt;p&gt;停止したコンテナを再び動かしてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker start my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;docker psを見ると立ち上がっていることが確認できると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、コンテナのログを確認したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker logs my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でできます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;po-qi&quot;&gt;破棄&lt;&#x2F;h3&gt;
&lt;p&gt;先程、コンテナの停止を行いましたが、&lt;br &#x2F;&gt;
停止してもコンテナは残り続けるので、&lt;br &#x2F;&gt;
知らないうちに容量を圧迫しかねなかったりするので、&lt;br &#x2F;&gt;
不要なら破棄しましょう&lt;&#x2F;p&gt;
&lt;p&gt;コンテナの破棄は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker rm my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;Screenshot-2023-07-21-at-8.28.43-1024x43.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;おっとエラーが出ました。&lt;br &#x2F;&gt;
コンテナを削除するには、まずstopをする必要がありそうです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker stop my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker rm my-apache-app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで削除できました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;imezinopo-qi&quot;&gt;イメージの破棄&lt;&#x2F;h3&gt;
&lt;p&gt;さて、コンテナは破棄しましたが、&lt;br &#x2F;&gt;
イメージはまだ残っております。&lt;&#x2F;p&gt;
&lt;p&gt;下記のコマンドでダウンロードしたイメージを確認できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これも知らないうちに容量を圧迫しかねないので、&lt;br &#x2F;&gt;
不要なら削除しましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker image rm httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;または、&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker rmi httpd:2.4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;なお、Dockerを本格的に学ぶなら下記の書籍などがおすすめです。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784295005520.jpg&quot; alt=&quot;Docker実践ガイド第2版 コンテナ環境の構築・運用・活用 （impress　top　gear） [ 古賀政純 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Docker実践ガイド第2版 コンテナ環境の構築・運用・活用 （impress　top　gear） [ 古賀政純 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Docker%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89%E7%AC%AC2%E7%89%88%20%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89%E3%83%BB%E9%81%8B%E7%94%A8%E3%83%BB%E6%B4%BB%E7%94%A8%20%EF%BC%88impress%E3%80%80top%E3%80%80gear%EF%BC%89%20%5B%20%E5%8F%A4%E8%B3%80%E6%94%BF%E7%B4%94%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;15785274&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784296106424.jpg&quot; alt=&quot;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築 [ 大澤 文孝 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築 [ 大澤 文孝 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%81%95%E3%82%8F%E3%81%A3%E3%81%A6%E5%AD%A6%E3%81%B6%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%80%80docker%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E6%A7%8B%E7%AF%89%20%5B%20%E5%A4%A7%E6%BE%A4%20%E6%96%87%E5%AD%9D%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16350772&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Redis基礎】データ型のList型とHash型について</title>
        <published>2023-07-20T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/list-hash/"/>
        <id>https://reisuta.com/list-hash/</id>
        
        <content type="html" xml:base="https://reisuta.com/list-hash/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;redis-string&#x2F;&quot;&gt;前回の記事&lt;&#x2F;a&gt;の続きで、&lt;br &#x2F;&gt;
本記事では、List型とHash型を取り上げようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;String型と同じく、これらのデータ型も重要なので、&lt;br &#x2F;&gt;
しっかりマスターしてもらえると幸いです。&lt;br &#x2F;&gt;
これらのデータ型は、たくさんのコマンドがあるので、&lt;br &#x2F;&gt;
ある種のチートシート的にも使えるよう執筆しました。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;listxing&quot;&gt;List型&lt;&#x2F;h2&gt;
&lt;p&gt;List型はわりとそのまんまで、&lt;br &#x2F;&gt;
RedisのString型のリストです。&lt;&#x2F;p&gt;
&lt;p&gt;順序を保持して、値を保存します。&lt;&#x2F;p&gt;
&lt;p&gt;試しに何か格納してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LPUSH sample_list 123 153 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;sample_listというキーに123、153、testを&lt;br &#x2F;&gt;
格納し、LRANGEで0(最初から)から-1(リストの最後)を取得します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;listxing-nokomando&quot;&gt;List型のコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;一覧は、下記のドキュメントに詳しく書かれております。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=list&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=list&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lpop&quot;&gt;LPOP&lt;&#x2F;h3&gt;
&lt;p&gt;キーで指定したリストから、最初の要素を消して、&lt;br &#x2F;&gt;
その値を返すコマンドです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LPOP sample_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LPOP sample_list 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;keyのあとに数値を指定すると、&lt;br &#x2F;&gt;
その数まで削除します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lpush&quot;&gt;LPUSH&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、LPOPの逆で、&lt;br &#x2F;&gt;
指定した値をすべて先頭に挿入します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LPUSH sample_list 123 153 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LPUSH sample_list testtest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;rpoptorpush&quot;&gt;RPOPとRPUSH&lt;&#x2F;h3&gt;
&lt;p&gt;これは、指定した値をそれぞれ&lt;br &#x2F;&gt;
末尾に対して操作するLPOPとLPUSHに該当します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lindex&quot;&gt;LINDEX&lt;&#x2F;h3&gt;
&lt;p&gt;キーのリストの、指定したインデックスの位置にある要素を返します。&lt;br &#x2F;&gt;
下記はindex 1の要素を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LINDEX sample_list 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;linsert&quot;&gt;LINSERT&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、簡単な探索ができるようなコマンドで、&lt;br &#x2F;&gt;
キーの直後(AFTER)または直前(BEFORE)に、&lt;br &#x2F;&gt;
起点となる要素(下記の場合、153)の後(前)に&lt;br &#x2F;&gt;
指定した要素(下記の場合、110)を挿入します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LINSERT sample_list BEFORE 153 110&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;pivot（検索する起点となる要素)がない場合、&lt;br &#x2F;&gt;
-1を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LINSERT sample_list BEFORE not_found 110&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そもそもkey自体が存在しない場合は、&lt;br &#x2F;&gt;
0を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LINSERT sample_listee BEFORE 153 110&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;llen&quot;&gt;LLEN&lt;&#x2F;h3&gt;
&lt;p&gt;シンプルにリストの長さを返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; LLEN sample_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;lrange&quot;&gt;LRANGE&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、既に何回か使っているが、&lt;br &#x2F;&gt;
List型における、事実上のKeysコマンドに相当するかと思われる。&lt;&#x2F;p&gt;
&lt;p&gt;すべての要素を確認する場合は、&lt;br &#x2F;&gt;
下記のようにする&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;始点は0から始まり、末尾は-1と表現できるので、&lt;br &#x2F;&gt;
最初から最後まで取得するという意味になる。&lt;&#x2F;p&gt;
&lt;p&gt;これ以外にも、文字通り範囲指定的な使い方もできて、&lt;br &#x2F;&gt;
末尾から２つの要素を取得するなら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list -2 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最初から、3つの要素を取得するなら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LRANGE sample_list 0 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;といった感じだ。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lset&quot;&gt;LSET&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、LISTにおける、&lt;br &#x2F;&gt;
SETコマンドのようなもので、&lt;br &#x2F;&gt;
indexを指定して、その要素を更新する。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;LSET sample_list 0 first_test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;hashxing&quot;&gt;Hash型&lt;&#x2F;h2&gt;
&lt;p&gt;Hash型は、List型の階層を深くしたような、&lt;br &#x2F;&gt;
データ型で、フィールドと値を対として持つデータ型です。&lt;&#x2F;p&gt;
&lt;p&gt;ちょうど、RubyのHashと似ているので、&lt;br &#x2F;&gt;
イメージとしては、こんな感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;785&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;平たいイメージで言うと、&lt;br &#x2F;&gt;
親キーと子キー(フィールド)と値があるような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;parent: (child1 =&amp;gt; &amp;#39;value1&amp;#39;, child2 =&amp;gt; &amp;#39;value2&amp;#39;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のようなイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;実際にコマンドを使うと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HSET parent child1 value1 child2 value2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HGET parent child2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このような感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;list-hash&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hashxing-nokomando&quot;&gt;Hash型のコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;ドキュメントは、下記です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=hash&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=hash&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hdel&quot;&gt;HDEL&lt;&#x2F;h3&gt;
&lt;p&gt;こちらはシンプルに要素を削除する系のコマンドで、&lt;br &#x2F;&gt;
キーとフィールドを指定する。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HDEL parent child2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hexists&quot;&gt;HEXISTS&lt;&#x2F;h3&gt;
&lt;p&gt;こちらはhash版のEXISTSコマンドに相当するものかと思われます。&lt;br &#x2F;&gt;
フィールドが存在すれば1を、存在しなければ0を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HEXISTS parent child1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HEXISTS parent child2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hget&quot;&gt;HGET&lt;&#x2F;h3&gt;
&lt;p&gt;先程も軽く使ったが、&lt;br &#x2F;&gt;
指定したフィールドに関連づく値を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HGET parent child1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hgetall&quot;&gt;HGETALL&lt;&#x2F;h3&gt;
&lt;p&gt;これはListでいう、LRANGE、&lt;br &#x2F;&gt;
汎用コマンドでいう、KEYSコマンドに近いもので、&lt;br &#x2F;&gt;
キーで指定した、フィールドと値を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HSET parent child3 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HGETALL parent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;child1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;value1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;child3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) &amp;quot;test&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hkeys&quot;&gt;HKEYS&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、フィールドだけを返す、HGETALLのようなコマンド&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HKEYS parent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;child1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;child3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hvals&quot;&gt;HVALS&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、フィールドの値だけを返す、HGETALLのようなコマンド&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; HVALS parent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;value11&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;test&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;value22&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hlen&quot;&gt;HLEN&lt;&#x2F;h3&gt;
&lt;p&gt;フィールドの数を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HLEN parent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hset&quot;&gt;HSET&lt;&#x2F;h3&gt;
&lt;p&gt;キーで指定したハッシュについて、&lt;br &#x2F;&gt;
フィールドと値のペアを挿入します。&lt;br &#x2F;&gt;
先程も軽く使いましたね。&lt;br &#x2F;&gt;
既にフィールドが存在する場合は、上書きとなります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HSET parent child1 value11 child2 value22&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hincrby&quot;&gt;HINCRBY&lt;&#x2F;h3&gt;
&lt;p&gt;String型にも、INCRBYというコマンドがあったが、&lt;br &#x2F;&gt;
そちらとほとんど同様。フィールドの値が数値のときのみ使えるコマンド。&lt;br &#x2F;&gt;
キーやフィールドがない場合は、0基準で加算が行われる。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1033&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;HINCRBY parent child7 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Redis基礎】Set型とSorted Set型</title>
        <published>2023-07-20T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/set-sorted-set/"/>
        <id>https://reisuta.com/set-sorted-set/</id>
        
        <content type="html" xml:base="https://reisuta.com/set-sorted-set/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;list-hash&#x2F;&quot;&gt;前回の記事&lt;&#x2F;a&gt;の続きで、&lt;br &#x2F;&gt;
本記事では、Set型とSorted Set型を取り上げようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これらのデータ型もString型、List型、Hash型と同じく、&lt;br &#x2F;&gt;
重要なのと、Sorted Set型については、&lt;br &#x2F;&gt;
やや特徴が強いデータ型なので、こちらについても、&lt;br &#x2F;&gt;
解説していきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;setxing&quot;&gt;Set型&lt;&#x2F;h2&gt;
&lt;p&gt;Set型は、RedisのString型の集合という点では、&lt;br &#x2F;&gt;
List型と似ているのですが、&lt;br &#x2F;&gt;
異なる点として、&lt;strong&gt;重複をゆるさない&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
という点と、&lt;strong&gt;順序を持たない&lt;&#x2F;strong&gt;という点です。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、List型だと重複を可能にし、順序を保持する。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LPUSH same_list same same same&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LRANGE same_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;same&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;same&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;same&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LPUSH same_list first&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; LRNAGE same_list 0 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;first&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これに対して、Set型の場合、&lt;br &#x2F;&gt;
重複が起きない。また順序も保持していないので、&lt;br &#x2F;&gt;
List型のように、何番目の値を取得するということもできない。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SADD same_set same same same&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SMEMBERS same_set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;same&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SADD set_list 1 2 3 4 123 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SMEMBERS set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) &amp;quot;123&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5) &amp;quot;2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6) &amp;quot;test&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;setxing-nokomando&quot;&gt;Set型のコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;コマンド一覧は、下記のドキュメントにあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=set&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=set&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sadd&quot;&gt;SADD&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは既に使いましたが、&lt;br &#x2F;&gt;
指定した集合に対して、任意の数の値を追加します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SADD set_list 1 2 1 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;scard&quot;&gt;SCARD&lt;&#x2F;h3&gt;
&lt;p&gt;集合に保存されている値の数を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SCARD set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sismember&quot;&gt;SISMEMBER&lt;&#x2F;h3&gt;
&lt;p&gt;指定した集合について、値が集合に含まれているかを返します。&lt;br &#x2F;&gt;
含まれている場合は1を、含まれていない場合は0を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SISMEMBER set_list test12&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SISMEMBER set_list test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;smembers&quot;&gt;SMEMBERS&lt;&#x2F;h3&gt;
&lt;p&gt;これも先程やりましたが、&lt;br &#x2F;&gt;
指定した集合について、すべての値を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SMEMBERS set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;spop&quot;&gt;SPOP&lt;&#x2F;h3&gt;
&lt;p&gt;指定した集合について、ランダムに値を返して、&lt;br &#x2F;&gt;
その値を集合から削除します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SPOP set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SPOP set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;test&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SPOP set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SPOP set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(nil)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SMEMBERS set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(empty array)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;srem&quot;&gt;SREM&lt;&#x2F;h3&gt;
&lt;p&gt;こちらも削除系で、&lt;br &#x2F;&gt;
指定した任意の値を削除します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SREM set_list 123 test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sdiff&quot;&gt;SDIFF&lt;&#x2F;h3&gt;
&lt;p&gt;複数の集合について、最初の集合から、それに続く集合の&lt;br &#x2F;&gt;
差から生じる集合を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SMEMBERS set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) &amp;quot;2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SMEMBERS set_list2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;5&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) &amp;quot;32&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SDIFF set_list set_list2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; SDIFF set_list2 set_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;5&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;32&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sinter&quot;&gt;SINTER&lt;&#x2F;h3&gt;
&lt;p&gt;指定された複数の集合の共通となる値の集合を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; SINTER set_list set_list2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sunion&quot;&gt;SUNION&lt;&#x2F;h3&gt;
&lt;p&gt;指定した集合に含まれるすべての値の集合を重複を除いて返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; SUNION set_list set_list2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-sorted-set&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sorted-setxing&quot;&gt;Sorted Set型&lt;&#x2F;h2&gt;
&lt;p&gt;Sorted Setは順序のあるSetのような感じで、&lt;br &#x2F;&gt;
重複が許されない集合です。&lt;&#x2F;p&gt;
&lt;p&gt;特徴的なのは、スコアをもたせることができる点です。&lt;br &#x2F;&gt;
ゲームなどのスコアの集計に便利なデータ型ですね。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sorted_set_list → 0.value2:500, 1.value3:200, 2.value:100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;Hashとやや似ている気もしますが、&lt;br &#x2F;&gt;
異なるのは、Hashは順序を持たないので、&lt;br &#x2F;&gt;
ランキング集計とかにはSorted Setのほうが向いているということです。&lt;&#x2F;p&gt;
&lt;p&gt;HashとSetのいいとこ取りをしたようなデータ型ですね。&lt;&#x2F;p&gt;
&lt;p&gt;使用例としては下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; ZADD sorted_set_list 100 value1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; ZADD sorted_set_list 500 value2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; ZADD sorted_set_list 200 value3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;(integer) 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; ZREVRANGE sorted_set_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;value2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;value3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;value1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis-cli&amp;gt; ZREVRANGE sorted_set_list 0 -1 WITHSCORES&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) &amp;quot;value2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) &amp;quot;500&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) &amp;quot;value3&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) &amp;quot;200&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5) &amp;quot;value1&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6) &amp;quot;100&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;以下、コマンドについて解説します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sorted-setxing-nokomando&quot;&gt;Sorted Set型のコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;ドキュメントはこちら。&lt;br &#x2F;&gt;
今までよりもコマンド多めですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=sorted-set&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=sorted-set&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zadd&quot;&gt;ZADD&lt;&#x2F;h3&gt;
&lt;p&gt;こちらすでに登場しているが、&lt;br &#x2F;&gt;
スコアと値を集合に追加します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZADD test_list 20 value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zcard&quot;&gt;ZCARD&lt;&#x2F;h3&gt;
&lt;p&gt;キーで指定した集合について、&lt;br &#x2F;&gt;
値の数を返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZCARD test_list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zrank&quot;&gt;ZRANK&lt;&#x2F;h3&gt;
&lt;p&gt;集合について、指定した値のスコアの低い順での順位を返します。&lt;br &#x2F;&gt;
順位は0から始まるので、最も低い場合は、0となる&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZRANK test_list value3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zrevrank&quot;&gt;ZREVRANK&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、ZRANKの高い順version。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZREVRANK test_list value3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zrem&quot;&gt;ZREM&lt;&#x2F;h3&gt;
&lt;p&gt;集合について、指定した値を削除します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZREM test_list value2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zmscore&quot;&gt;ZMSCORE&lt;&#x2F;h3&gt;
&lt;p&gt;集合について、指定した一つ以上の値のスコアを返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZMSCORE test_list value1 value3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;zrange&quot;&gt;ZRANGE&lt;&#x2F;h3&gt;
&lt;p&gt;集合について、指定された範囲の要素を返します。&lt;br &#x2F;&gt;
デフォルトだと、低い順です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZRANGE test_list 0 -1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;REVオプションでスコアが高い順になります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZRANGE test_list 0 -1 WITHSCORES REV&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;スコアの数値で絞り込みすることも可能で、&lt;br &#x2F;&gt;
例えば、スコアが0 &amp;lt; score 10の場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZADD test_list 10 value10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZADD test_list 0 value0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZADD test_list 4 value4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZADD test_list 9 value9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZRANGE test_list (0 (10 BYSCORE WITHSCORES&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;スコアが 0 &amp;lt;= score &amp;lt; 10なら&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ZRANGE test_list 0 (10 BYSCORE WITHSCORES&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Redis基礎】汎用コマンドとString型について対応するコマンド</title>
        <published>2023-07-18T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/redis-string/"/>
        <id>https://reisuta.com/redis-string/</id>
        
        <content type="html" xml:base="https://reisuta.com/redis-string/">&lt;p&gt;本記事では、Redisのデータ型のString型と、&lt;br &#x2F;&gt;
データ型に関わらない、汎用コマンドを解説します。&lt;&#x2F;p&gt;
&lt;p&gt;前回の記事では、Redis自体がどういうものなのかについて、&lt;br &#x2F;&gt;
解説したので、本記事では汎用コマンドや、データ型の一つである、&lt;br &#x2F;&gt;
String型を取り上げます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;redisnodetaxing&quot;&gt;Redisのデータ型&lt;&#x2F;h2&gt;
&lt;p&gt;前回の&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;redis-overview&#x2F;&quot;&gt;Redisの概要解説の記事&lt;&#x2F;a&gt;で、&lt;br &#x2F;&gt;
RedisがKVSタイプのインメモリデータベースである旨を解説しました。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ただ、KVSとはいっても、&lt;br &#x2F;&gt;
Redisには多様なデータ型があるので、&lt;br &#x2F;&gt;
通常のKVSよりも柔軟性が高いという特徴があります。&lt;&#x2F;p&gt;
&lt;p&gt;その中でも代表的なのが、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;ポイント&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#FFD54F&quot; bordercolor=&quot;#FFD54F&quot; bgcolor=&quot;#FFFDE7&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Strings&lt;&#x2F;li&gt;
&lt;li&gt;Lists&lt;&#x2F;li&gt;
&lt;li&gt;Sets&lt;&#x2F;li&gt;
&lt;li&gt;Hashes&lt;&#x2F;li&gt;
&lt;li&gt;Sorted sets&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;あたりでしょうか。&lt;br &#x2F;&gt;
（これ以外にもあります。)&lt;&#x2F;p&gt;
&lt;p&gt;本記事ではそんなRedisのデータ型の中でも&lt;br &#x2F;&gt;
特に使用頻度が高いであろうString型について取り上げます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;redisnofan-yong-komando&quot;&gt;Redisの汎用コマンド&lt;&#x2F;h2&gt;
&lt;p&gt;String型の紹介の前に、&lt;br &#x2F;&gt;
型に関わらず使用する汎用コマンドを一部紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;keys&quot;&gt;KEYS&lt;&#x2F;h3&gt;
&lt;p&gt;Redisでキーの一覧を取得したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;KEYS *&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうにすると、すべてのキーを取得できます。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;はワイルドカードで、全てという意味ですね。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;しかし、KEYSコマンドは、&lt;br &#x2F;&gt;
実行時間がかかるので本番環境とかではあまり使わない方が良いとされています。&lt;&#x2F;p&gt;
&lt;p&gt;ドキュメントには以下のようなコマンド例が紹介されていますね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis&amp;gt; MSET firstname Jack lastname Stuntman age 35&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;OK&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;redis&amp;gt; KEYS *name*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;keys&#x2F;&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;keys&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;exists&quot;&gt;EXISTS&lt;&#x2F;h3&gt;
&lt;p&gt;キーが存在するかどうかの確認は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EXISTS X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうにします。&lt;br &#x2F;&gt;
この場合、Xがキー名にあたります。&lt;&#x2F;p&gt;
&lt;p&gt;存在する場合は、1を返し、&lt;br &#x2F;&gt;
存在しない場合は、0を返します。&lt;&#x2F;p&gt;
&lt;p&gt;キーを複数設定することも可能で、&lt;br &#x2F;&gt;
その場合は、マッチした数を返します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;type&quot;&gt;TYPE&lt;&#x2F;h3&gt;
&lt;p&gt;データ型を確認する際は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TYPE X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうにします。&lt;br &#x2F;&gt;
返り値としては、stringやhashなどというように、&lt;br &#x2F;&gt;
データ型が返されます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;del&quot;&gt;DEL&lt;&#x2F;h3&gt;
&lt;p&gt;削除は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;DEL X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに行い、&lt;br &#x2F;&gt;
返り値は、削除したキーの数になります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;redis-string&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stringxing&quot;&gt;String型&lt;&#x2F;h2&gt;
&lt;p&gt;プログラミング的に考えると、Stringというと、&lt;br &#x2F;&gt;
文字列がぱっと思い浮かびますが、&lt;br &#x2F;&gt;
RedisにおけるString型は文字列に限らず、&lt;br &#x2F;&gt;
整数、小数、バイナリーデータなどもこのStringに該当します。&lt;&#x2F;p&gt;
&lt;p&gt;いわゆるKVSに相当するデータ型といえるだろう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stringxing-nidui-ying-surukomando&quot;&gt;String型に対応するコマンド&lt;&#x2F;h3&gt;
&lt;p&gt;String型の対応するコマンド一覧は、&lt;br &#x2F;&gt;
こちらに書かれております。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=string&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;?group=string&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この中から一部抜粋します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gettoset&quot;&gt;GETとSET&lt;&#x2F;h3&gt;
&lt;p&gt;前回の記事でも少しだけ触れましたが、&lt;br &#x2F;&gt;
値の取得はGETで行います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET X&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これに対して、値の保存は、SETで行います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET X user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;mgettomset&quot;&gt;MGETとMSET&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、GETとSETの複数設定バージョンです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; MSET user1 tarou user2 hanako&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; MGET user1 user2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;getrangetosetrange&quot;&gt;GETRANGEとSETRANGE&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、挿入・取得する位置などを指定できるGETとSETです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET test testtarou&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET test # testtarouが返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GETRANGE test 0 3 # testが返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SETRANGE test 0 first&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET test # firstarouが返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;setrange&#x2F;&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;setrange&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;append&quot;&gt;APPEND&lt;&#x2F;h3&gt;
&lt;p&gt;既に存在するキーに対して、末尾に引数の内容を追加します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET user yamada&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;APPEND user syoutarou&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、キーが存在しない場合は、&lt;br &#x2F;&gt;
新しく作成します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;strlen&quot;&gt;STRLEN&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、キーの値の長さを返します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;STRLEN user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;incr&quot;&gt;INCR&lt;&#x2F;h3&gt;
&lt;p&gt;String型には数値を入れることもできるので、&lt;br &#x2F;&gt;
数値増加のコマンド(INCR)などを使用することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET COUNT 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INCR COUNT # INCRは1だけ増加させる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET COUNT # 101が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;INCRコマンドは、値が数値のときのみ使えます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;incrby&quot;&gt;INCRBY&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、増加させる値を指定できるINCRのような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET COUNT 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;INCRBY COUNT 102 # 102増加させる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET COUNT # 202が返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;decrtodecrby&quot;&gt;DECRとDECRBY&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、数値を減少させるバージョンのINCRとINCRBYに該当します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setkomandonoopusiyon&quot;&gt;SETコマンドのオプション&lt;&#x2F;h3&gt;
&lt;p&gt;SETコマンドには、豊富なオプションが用意されています。&lt;br &#x2F;&gt;
その中から一部紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;set&#x2F;&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;commands&#x2F;set&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;ex&quot;&gt;EX&lt;&#x2F;h4&gt;
&lt;p&gt;EXオプションは、TTL(Time To Live)、すなわち失効時間を設定することができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET anotherkey &amp;quot;will expire in a ten second&amp;quot; EX 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET anotherkey # 10秒後に行うと、nilになる。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみにTTLコマンドでキーの残りのTTLを確認できます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;nx&quot;&gt;NX&lt;&#x2F;h4&gt;
&lt;p&gt;NXオプションは、キーが存在しない場合に値を設定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET user yamada&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET user tarou NX&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET user # yamadaが返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET user tanaka&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET user # tanakaが返される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Redis基礎】Redisとは何か？Redisの基本を解説</title>
        <published>2023-07-17T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/redis-overview/"/>
        <id>https://reisuta.com/redis-overview/</id>
        
        <content type="html" xml:base="https://reisuta.com/redis-overview/">&lt;p&gt;本記事では、Redisの概要について解説します。&lt;br &#x2F;&gt;
Redisは、最近のモダンなWebシステムでは使われることが増えてきた、&lt;br &#x2F;&gt;
NoSQLの一種です。&lt;&#x2F;p&gt;
&lt;p&gt;Redisの知識は、インフラの知識にも、&lt;br &#x2F;&gt;
バックエンドの知識にもなるので、&lt;br &#x2F;&gt;
近年重要度が高まっている気がします。&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では、Redisの基本について解説します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;redistoha&quot;&gt;Redisとは？&lt;&#x2F;h2&gt;
&lt;p&gt;Redisとは、インメモリのデータストラクチャーと定義されることが多く、&lt;br &#x2F;&gt;
KVSなどが特徴に挙げられます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;docs&#x2F;about&#x2F;&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;docs&#x2F;about&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;といっても、正直ピンとこないと思います（私がそうだった)&lt;&#x2F;p&gt;
&lt;p&gt;インメモリ？KVS？うん？結局どういうことって感じでした。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Redisとは、ざっくり定義するとDBの一種です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、何らかのデータを格納したい際に使われるものに&lt;br &#x2F;&gt;
変わりはありません。&lt;&#x2F;p&gt;
&lt;p&gt;ただとはいっても、普通のDB(mysqlのような)とは、&lt;br &#x2F;&gt;
確かに異なる特徴があって、それがRedisについての理解をややこしくしている気がします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;inmemoritoha&quot;&gt;インメモリとは？&lt;&#x2F;h3&gt;
&lt;p&gt;Redisの定義に登場する、インメモリデータベースについてですが、&lt;br &#x2F;&gt;
これは、割りとそのまんまでして、&lt;br &#x2F;&gt;
メモリにデータを格納するから、このように呼ばれているのかと思います。&lt;br &#x2F;&gt;
(オンメモリと呼ばれることもあります。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;データをディスクや SSD に保存するわけではないので、障害やシャットダウンなどによって、&lt;br &#x2F;&gt;
データが容易に失われてしまうリスクがありつつも、ディスクアクセスがなくなったことで、&lt;br &#x2F;&gt;
応答時間を短くすることができ、パフォーマンスが向上するというメリットがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;nosql&#x2F;in-memory&#x2F;&quot;&gt;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;nosql&#x2F;in-memory&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;つまり、インメモリデータベースのRedisは、&lt;br &#x2F;&gt;
DBに変わりはないけど、メモリにデータを格納する、&lt;br &#x2F;&gt;
堅牢性よりもパフォーマンス重視のDBということが伺えますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kvstoha&quot;&gt;KVSとは？&lt;&#x2F;h3&gt;
&lt;p&gt;KVSとは、Key-Value Storeの略称で、&lt;br &#x2F;&gt;
RDBのようにテーブル構造でデータを格納するのではなく、&lt;br &#x2F;&gt;
&lt;code&gt;user: &#x27;山田太郎&#x27;&lt;&#x2F;code&gt;のようにRubyのハッシュっぽい形式でデータを格納するスタイルのことです。&lt;&#x2F;p&gt;
&lt;p&gt;KeyとValueを格納するシンプルな形式で、&lt;br &#x2F;&gt;
プログラミングでもお馴染みの形式ですね。(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-object&#x2F;&quot;&gt;JSのオブジェクト&lt;&#x2F;a&gt;や&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;hash-symbol&#x2F;&quot;&gt;RubyのHashなど&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;785&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;25&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;なので、RDBのようにSQLを使わない、NoSQLで見かけるデータ構造ですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nosqltutenandatuke&quot;&gt;NoSQLってなんだっけ？&lt;&#x2F;h3&gt;
&lt;p&gt;NoSQLは、Not only SQLの略称で、&lt;br &#x2F;&gt;
SQLを使わずにデータを保存するデータベースのことを指します。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、RDBと同じく、&lt;br &#x2F;&gt;
&lt;strong&gt;種類の名称なので、NoSQLというDBが存在するわけではなく、&lt;br &#x2F;&gt;
様々なNoSQLが存在します。(RedisもNoSQLです)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的にこれらのNoSQLは、&lt;br &#x2F;&gt;
そのパフォーマンス性が重視されて、&lt;br &#x2F;&gt;
技術選定されることが多いかと思います。&lt;br &#x2F;&gt;
(多いユースケースとしては、RDBとの併用で、&lt;br &#x2F;&gt;
RDBのインデックスやチューニングではパフォーマンスに&lt;br &#x2F;&gt;
限界がある部分にNoSQLを用いるなど。NoSQLだけが用いられることは&lt;br &#x2F;&gt;
かなり稀(というか私はあまり見たことがない構成です))&lt;&#x2F;p&gt;
&lt;p&gt;そのため、NoSQLは、いわゆるDBとはちょっと特徴が異なるものと言えそうですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jie-ju-redistoha&quot;&gt;結局Redisとは？&lt;&#x2F;h3&gt;
&lt;p&gt;上記を踏まえると、&lt;&#x2F;p&gt;
&lt;p&gt;Redisは、KVSタイプのインメモリデータベース(NoSQL)&lt;br &#x2F;&gt;
といったふうに定義することができそうですね。&lt;br &#x2F;&gt;
(※Redisの場合、豊富なデータ型があるので、&lt;br &#x2F;&gt;
単なるKVSよりも柔軟という特徴がありますが)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;redis-overview&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;redisnoyusukesu&quot;&gt;Redisのユースケース&lt;&#x2F;h2&gt;
&lt;p&gt;Redisは、RDBに比べて、&lt;br &#x2F;&gt;
パフォーマンスを重視したものなので、&lt;br &#x2F;&gt;
必然的にパフォーマンスが必要な処理に採用されることがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、高頻度にデータが書き換わってしまい、&lt;br &#x2F;&gt;
いちいち、ディスクアクセスしていたら、処理が追いつかないようなものに、&lt;br &#x2F;&gt;
採用されているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;セッション情報&lt;&#x2F;li&gt;
&lt;li&gt;リアルタイム性が高い処理全般&lt;&#x2F;li&gt;
&lt;li&gt;キャッシュ&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;などでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;nosql&#x2F;in-memory&#x2F;&quot;&gt;https:&#x2F;&#x2F;aws.amazon.com&#x2F;jp&#x2F;nosql&#x2F;in-memory&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;redisnoinsutoru&quot;&gt;Redisのインストール&lt;&#x2F;h2&gt;
&lt;p&gt;ドキュメントを参考に、macでの環境構築を紹介していきます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;redis.io&#x2F;docs&#x2F;getting-started&#x2F;installation&#x2F;install-redis-on-mac-os&#x2F;&quot;&gt;https:&#x2F;&#x2F;redis.io&#x2F;docs&#x2F;getting-started&#x2F;installation&#x2F;install-redis-on-mac-os&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;まずは、Homebrewでインストールします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install redis&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;インストールしたら、動かしてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;redis-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;サーバーに入るには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;redis-cli&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;redis-clidedetawobao-cun-sitequ-richu-sitemiru&quot;&gt;redis-cliでデータを保存して取り出してみる&lt;&#x2F;h3&gt;
&lt;p&gt;SETコマンドで値を保存します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;SET user yamada&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そして、GETコマンドでキーから値を取得します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GET user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで値を取得することができます。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Rubyブロック】yieldとProcオブジェクト</title>
        <published>2023-06-04T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/block-proc/"/>
        <id>https://reisuta.com/block-proc/</id>
        
        <content type="html" xml:base="https://reisuta.com/block-proc/">&lt;p&gt;Rubyの文法の中で、&lt;br &#x2F;&gt;
やはり避けては通れないぐらい重要な概念として、&lt;br &#x2F;&gt;
ブロックがあります。&lt;&#x2F;p&gt;
&lt;p&gt;このブロックは、ものすごくよく使いますし、&lt;br &#x2F;&gt;
重要な概念ですが、&lt;br &#x2F;&gt;
その奥深いところは、結構難しいかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事は、Ruby基礎編と言っていながら、&lt;br &#x2F;&gt;
その点やや応用編になるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ブロックについて、詳しく知らなくてもいい。&lt;br &#x2F;&gt;
とりあえず、どんな感じなのか、ざっと理解できれば十分という方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;array-block-loop&#x2F;#i-4&quot;&gt;こちらの記事&lt;&#x2F;a&gt;を御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、ブロックについて、&lt;br &#x2F;&gt;
詳細に解説します。&lt;&#x2F;p&gt;
&lt;p&gt;また、下記の動画でRuby全般の文法について、&lt;br &#x2F;&gt;
一通り解説しているので、よろしければご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;hMaSBbtuQnY&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;burotukutoha&quot;&gt;ブロックとは？&lt;&#x2F;h2&gt;
&lt;p&gt;ブロックの概要については、&lt;br &#x2F;&gt;
既に下記の記事で解説していますが、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ブロックは、簡単に言えば、&lt;br &#x2F;&gt;
do~endとか{}とかの塊を指しており、&lt;br &#x2F;&gt;
処理の塊みたいなものです。&lt;&#x2F;p&gt;
&lt;p&gt;処理のかたまりといえば、&lt;br &#x2F;&gt;
関数とかが想起されますが、&lt;br &#x2F;&gt;
Rubyには&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;&quot;&gt;すべてがオブジェクト&lt;&#x2F;a&gt;という思想があるため、&lt;br &#x2F;&gt;
この処理のかたまり（すなわちブロック）もオブジェクトとして語られます。&lt;br &#x2F;&gt;
(後に解説するProcオブジェクト)&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、こうしたRubyのブロック周りについて触れていきますが、&lt;br &#x2F;&gt;
まず、yieldというメソッドについて言及します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yield&quot;&gt;yield&lt;&#x2F;h3&gt;
&lt;p&gt;Rubyのメソッドには、&lt;br &#x2F;&gt;
引数としてブロックを渡すことができます。&lt;&#x2F;p&gt;
&lt;p&gt;試しにメソッド呼び出しを、&lt;br &#x2F;&gt;
ブロック付きで呼び出してみるとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; say&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  yield&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;ブロックで呼ばれました&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;say do ~ endの部分が、&lt;br &#x2F;&gt;
sayメソッドの呼び出しで、&lt;br &#x2F;&gt;
引数にdo ~ endのブロックを渡していますね。&lt;&#x2F;p&gt;
&lt;p&gt;さて、ここで、sayメソッドの方に、&lt;br &#x2F;&gt;
yieldという記法が出現していますが、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;これはブロックを実行するメソッドです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、say doという感じで、&lt;br &#x2F;&gt;
ブロックとしてメソッドが実行されているので、&lt;br &#x2F;&gt;
&lt;strong&gt;メソッドの内部でyieldとされた場合、ブロック内の、&lt;br &#x2F;&gt;
puts &#x27;ブロックが呼ばれました&#x27;が実行されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ブロックなしでメソッドを呼んでいて、&lt;br &#x2F;&gt;
yieldが使われているとエラーになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; say&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  yield&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#  `say&amp;#39;: no block given (yield) (LocalJumpError)となる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;以上のように、&lt;br &#x2F;&gt;
yieldは、ブロックを呼ぶときに&lt;br &#x2F;&gt;
使うメソッドですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;doc&#x2F;spec=2fcall.html#yield&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;doc&#x2F;spec=2fcall.html#yield&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、ブロックが渡されているのかどうかを&lt;br &#x2F;&gt;
メソッド内で条件分岐したい場合は、block_given?を使うといいかもしれません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; say&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if block_given?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    yield&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello2 world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;ブロックが呼ばれました&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# メソッド内でblock_given?で分岐しているのでエラーにならない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;また、yieldに引数を渡すこともできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; say&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  initial_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = yield&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1111&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # ①&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; initial_number &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 2222と返す ④&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;do&lt;&#x2F;span&gt;&lt;span&gt; |value|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 1111と返す ②&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # ③&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ややこしいですが、&lt;br &#x2F;&gt;
まず最初の二行目のyieldでブロック先に飛びます。&lt;&#x2F;p&gt;
&lt;p&gt;コメントで①とか番号振ってありますが、&lt;br &#x2F;&gt;
その順番で処理が実行されています。&lt;&#x2F;p&gt;
&lt;p&gt;最初はyieldの引数の1111がそのままputsされ、&lt;br &#x2F;&gt;
valueの中身を二倍します。&lt;&#x2F;p&gt;
&lt;p&gt;これで引数の中身が書き換わったので、&lt;br &#x2F;&gt;
initial_numberの中身が2222となって出力されています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;burotukuwoyin-shu-tositeming-shi-de-nishou-kequ-ru&quot;&gt;ブロックを引数として明示的に受け取る&lt;&#x2F;h3&gt;
&lt;p&gt;ブロックを引数として明示的に受け取ることもでき、&lt;br &#x2F;&gt;
その場合、&amp;amp;という記法を使います。&lt;&#x2F;p&gt;
&lt;p&gt;この明示的というキーワードですが、&lt;br &#x2F;&gt;
さっきのコードも、&lt;br &#x2F;&gt;
do ~ endがメソッドの引数とみなせますよね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記の場合、明示的とは言いにくいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、&lt;mark&gt;&lt;strong&gt;明示的にブロックが引数であることを&lt;br &#x2F;&gt;
強調した書き方が&amp;amp;という記法にあたります。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;呼び出すときにはcallで記載しています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; say&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;args&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  initial_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; args.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1111&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # ①&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; initial_number &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 2222と返す ④&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;say &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;do&lt;&#x2F;span&gt;&lt;span&gt; |value|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 1111と返す ②&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # ③&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;prockurasu&quot;&gt;Procクラス&lt;&#x2F;h2&gt;
&lt;p&gt;RubyにはProcクラスというものがあり、&lt;br &#x2F;&gt;
これはブロックをオブジェクト化したものです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;Proc.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;Proc.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Proc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Proc.newという形で作成でき、&lt;br &#x2F;&gt;
中身のブロックを呼び出すときは、&lt;br &#x2F;&gt;
callを使用します。&lt;&#x2F;p&gt;
&lt;p&gt;Procと似たようなものとして、&lt;br &#x2F;&gt;
procメソッドやラムダというものがあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# value = Proc.new { &amp;#39;hello world&amp;#39; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; proc&lt;&#x2F;span&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# ラムダ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 引数がある場合 &amp;quot;-&amp;gt; (a, b) { a * b }&amp;quot;のようにする。(a, b)の()は省略可&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; lambda&lt;&#x2F;span&gt;&lt;span&gt; { |a| a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value0.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value2.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;どれも挙動としては似ているのですが、&lt;br &#x2F;&gt;
ラムダとProc.newの違いとして有名なのが、&lt;br &#x2F;&gt;
&lt;strong&gt;引数の扱い&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# Proc.newの場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Proc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt; { |a, b, c| a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; c.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # nil.to_iを0にするため&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 引数が1つ足りない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 引数が2つ多い&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 上記2つは、呼び出せる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# ラムダの場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; -&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a, b, c { a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; c.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# puts value1.call(1, 2) # wrong number of arguments (given 2, expected 3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 正常&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# puts value1.call(1, 2, 3, 4, 5) # wrong number of arguments (given 5, expected 3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数の数が合わないとArgumentErrorが起きる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これ以外にも、ジャンプ構文内での挙動の違いなどあるのですが、&lt;br &#x2F;&gt;
細かいので引数の扱いが異なるっていうことだけおさえておけば&lt;br &#x2F;&gt;
十分かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;block-proc&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;upcasenoben-dang-noyi-wei&quot;&gt;&amp;amp;:upcaseの本当の意味&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;array-block-loop&#x2F;#i-5&quot;&gt;以前の記事&lt;&#x2F;a&gt;で、&amp;amp;:メソッドの記法について、&lt;br &#x2F;&gt;
少し解説しましたが、どういう仕組みでこうなっているかは触れませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;724&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;ここでこの記法の意味について解説します。&lt;&#x2F;p&gt;
&lt;p&gt;まず、この記法のみそは、to_procメソッドにあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Symbol&#x2F;i&#x2F;to_proc.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Symbol&#x2F;i&#x2F;to_proc.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Method&#x2F;i&#x2F;to_proc.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Method&#x2F;i&#x2F;to_proc.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Proc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt; { |a, b| a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; b }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_proc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # #&amp;lt;Proc:0x00007faf9b91f210 index3.rb:1&amp;gt;みたいに返る&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のようにprocオブジェクトを返すメソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;これがシンボルの場合、少し変わった挙動をします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :to_s&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_proc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# #&amp;lt;Proc:0x00007f796288b4a8(&amp;amp;:to_s)&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ans&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; ans.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 1.to_s.classと同じ挙動&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記は、to_procでシンボルをProcオブジェクトにして、&lt;br &#x2F;&gt;
それに対して、引数を一つ渡してcallしています。&lt;&#x2F;p&gt;
&lt;p&gt;その際、&lt;strong&gt;1つ目の引数をレシーバーにして、&lt;br &#x2F;&gt;
元のシンボル名と同名のメソッドを実行します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;mark&gt;&lt;strong&gt;1つ目の引数、1に対して、&lt;br &#x2F;&gt;
元のシンボル名、to_sと同名のto_sメソッドを実行するので、&lt;br &#x2F;&gt;
1.to_sと同様の挙動になるということです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、ここで下記のコードをもう一度見てみましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:to_s&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;意味としては、1とかの数字をstringにするという感じですが、&lt;br &#x2F;&gt;
どういう仕組でこうなるのかというと、&lt;&#x2F;p&gt;
&lt;p&gt;[st-flexbox url=&quot;&quot; rel=&quot;nofollow&quot; target=&quot;&quot; webicon=&quot;&quot; title=&quot;実行順序&quot; width=&quot;&quot; height=&quot;&quot; color=&quot;#fff&quot; fontsize=&quot;200&quot; radius=&quot;0&quot; shadow=&quot;#424242&quot; bordercolor=&quot;#ccc&quot; borderwidth=&quot;1&quot; bgcolor=&quot;#ccc&quot; backgroud_image=&quot;&quot; blur=&quot;on&quot; left=&quot;&quot; margin_bottom=&quot;0&quot; myclass=&quot;&quot;]&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;amp;はブロックを引数として受け取るので、:to_sというシンボルをブロック引数として受け取る&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&amp;amp;でto_procメソッドが呼ばれて、:to_sシンボルはProcオブジェクトになる&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;mapによって、1とか2のような数字が第一引数としてProcオブジェクトに渡される。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;引数（この場合1とか2)に対して、元のシンボル名と同じto_sメソッドが実行される&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;mapによって実行されたものが新しい配列に格納される&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;という流れによって、&lt;br &#x2F;&gt;
[1, 2, 3, 4]の配列が、すべてStringにした&lt;br &#x2F;&gt;
新しい配列が作成されます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;burotukunohuo-yong-li&quot;&gt;ブロックの活用例&lt;&#x2F;h3&gt;
&lt;p&gt;試しにブロックを使って、&lt;br &#x2F;&gt;
ちょっと複雑なコードを書いてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; calc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;value&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;block&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if block_given?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;block)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    value.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;      puts&lt;&#x2F;span&gt;&lt;span&gt; f &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kakeru_3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Proc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt; { |a|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;kakeru_2_tasu_3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Proc&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt; { |a|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calc&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;kakeru_3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calc&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span&gt;kakeru_2_tasu_3)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;calc&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このように、ブロック引数に対して、eachを呼び出すとかすれば、&lt;br &#x2F;&gt;
メソッドの汎用性を高められるでしょう。&lt;br &#x2F;&gt;
(railsのコードとかでは、こういう記法がバシバシ使われている気がする)&lt;&#x2F;p&gt;
&lt;p&gt;つまり、メソッドを呼び出したら画一的に似たようなブロックが実行されるのではなく、&lt;br &#x2F;&gt;
メソッド呼び出し時に、どういうブロックを実行させるかを選択させるようなイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;正直、こういうコードを書くのはめちゃくちゃ難易度が高いと思います。&lt;br &#x2F;&gt;
（上記のコードはただのサンプルで汚いのはお許しを、&lt;br &#x2F;&gt;
あくまでイメージを共有したかっただけですので)&lt;&#x2F;p&gt;
&lt;p&gt;自由自在に、こうしたブロック引数に処理をさせたりして、&lt;br &#x2F;&gt;
結合度が弱い汎用性が高いコードを書けるように慣れれば、&lt;br &#x2F;&gt;
もうかなりのRails上級者といえるでしょう。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【オブジェクト指向入門】Rubyのclass定義方法から継承まで</title>
        <published>2023-06-03T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/object-orientation/"/>
        <id>https://reisuta.com/object-orientation/</id>
        
        <content type="html" xml:base="https://reisuta.com/object-orientation/">&lt;p&gt;本記事では、オブジェクト指向については、解説します。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクト指向は、プログラミングの伝統的かつ王道の手法なので、&lt;br &#x2F;&gt;
ぜひとも理解しておきたい概念の一つです。&lt;&#x2F;p&gt;
&lt;p&gt;動画は下記をご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;AoQeUb3zx8A&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;obuziekutozhi-xiang-toha&quot;&gt;オブジェクト指向とは？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;オブジェクト指向とは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;プログラムをオブジェクトとして構築し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;それらのオブジェクトが相互に作用することによって機能を実現するプログラミング手法のことです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、学校の先生が生徒(オブジェクト)一人ひとりに&lt;br &#x2F;&gt;
逐一指示を出すのではなく、廊下の張り紙とか校則とかで、&lt;br &#x2F;&gt;
生徒一人ひとりに、行動してもらうという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;これの何がいいかって、先生が逐一指示を出す（すなわち、逐一条件分岐とか&lt;br &#x2F;&gt;
色々コードを書く）とどこかで破綻すると思いますが、&lt;br &#x2F;&gt;
生徒自身（オブジェクト）に振る舞い（メソッド)をもたせることで、&lt;br &#x2F;&gt;
勝手に動いてもらう感じです。&lt;&#x2F;p&gt;
&lt;p&gt;そもそも、&lt;strong&gt;システムとは、完成しないものと捉えることもできます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
そのため、何らかの変更が生じるのは避けられないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、そうした変更に対する影響範囲を小さくしたり、&lt;br &#x2F;&gt;
再利用性を高めたりするための一つの手段が、&lt;br &#x2F;&gt;
オブジェクト指向に該当するともいえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、変更に強いコードを書くための&lt;br &#x2F;&gt;
手段の一つがオブジェクト指向ともいえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクト指向は、やや難しいかつ、奥が深い概念なので、&lt;br &#x2F;&gt;
最初はピンとこないかもしれませんが、&lt;br &#x2F;&gt;
要は&lt;strong&gt;変更に強い効率的なコーディング手法の一つ&lt;&#x2F;strong&gt;と思ってもらえれば問題ないです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yuzanoyao-qiu&quot;&gt;ユーザーの要求&lt;&#x2F;h3&gt;
&lt;p&gt;一般に、ソフトウェア開発においては、&lt;br &#x2F;&gt;
ユーザーが存在し、その要求を満たすために、&lt;br &#x2F;&gt;
開発することが求められるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、受託開発が最もわかりやすいと思いますが、&lt;br &#x2F;&gt;
「こういうものを作ってくれ」と要求されると思います。&lt;&#x2F;p&gt;
&lt;p&gt;たいてい、こういった要求は、不完全で、&lt;br &#x2F;&gt;
流動的なのが開発者の悩みの種です。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクト指向は、変更に強いプログラミング手法なので、&lt;br &#x2F;&gt;
このような流動的で不完全な要求に対する処世術のような側面もあるのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクト指向言語の代表選手である、&lt;br &#x2F;&gt;
JavaがSierに多いというのも、この辺の事情も&lt;br &#x2F;&gt;
関係しているのかもしれませんね。&lt;&#x2F;p&gt;
&lt;p&gt;裏を返せば、要求も変わらず、&lt;br &#x2F;&gt;
未来においても、仕様が変わらないシステムであれば、&lt;br &#x2F;&gt;
オブジェクト指向など不要なのです。（そんなシステムがあればの話ですが）&lt;&#x2F;p&gt;
&lt;p&gt;さて、抽象的な話はこれぐらいにして、&lt;br &#x2F;&gt;
早速どういうふうに書いていくのか解説していきます。&lt;&#x2F;p&gt;
&lt;p&gt;本記事ではRubyの場合で解説します。&lt;br &#x2F;&gt;
Ruby自体の解説や文法などの解説は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で行っているので、&lt;br &#x2F;&gt;
併せてご参考ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kurasutoha&quot;&gt;クラスとは？&lt;&#x2F;h2&gt;
&lt;p&gt;クラスは、&lt;strong&gt;オブジェクト指向における設計図の役割&lt;&#x2F;strong&gt;を示すものです。&lt;&#x2F;p&gt;
&lt;p&gt;これだけだと、ピンとこないかもしれませんが、&lt;br &#x2F;&gt;
クラスは、例えるなら学校のクラス名簿みたいなもので、&lt;br &#x2F;&gt;
抽象化された名前のリストでしかなく、&lt;br &#x2F;&gt;
インスタンス化された（いわゆる名簿に載っているその人）&lt;br &#x2F;&gt;
具象物に会うことができないですよね。&lt;&#x2F;p&gt;
&lt;p&gt;その点、クラスというものは抽象的で、&lt;br &#x2F;&gt;
具象化（インスタンス化）に対応するものといった感じです。&lt;br &#x2F;&gt;
（余計分かりにくくなったかな...)&lt;&#x2F;p&gt;
&lt;p&gt;具体例としては、設計図の方が的をいているので、&lt;br &#x2F;&gt;
その例でイメージがつけばそれでOKです。&lt;&#x2F;p&gt;
&lt;p&gt;設計図と言われてもピンとこない場合は、&lt;br &#x2F;&gt;
始業式の学校のクラス名簿を想起して、名前のリスト（抽象物）でしかなく、&lt;br &#x2F;&gt;
それぞれの名前の人にこれから会っていくんだな（インスタンス化）みたいな感じで、&lt;br &#x2F;&gt;
考えるとわかりやすいかも？です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;obuziekuto-insutansu-resiba&quot;&gt;オブジェクト・インスタンス・レシーバー&lt;&#x2F;h3&gt;
&lt;p&gt;オブジェクトは、クラスをもとに作られた具象物のようなものです。&lt;br &#x2F;&gt;
クラス名簿がクラスなら、生徒がオブジェクトにあたりますね。&lt;br &#x2F;&gt;
インスタンスやレシーバーも似たようなもので、ほとんど別名みたいなものです。&lt;&#x2F;p&gt;
&lt;p&gt;インスタンスは、クラスをインスタンス化すると言ったりするので、&lt;br &#x2F;&gt;
その文脈だと、オブジェクトというよりインスタンスと呼ばれることが多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;レシーバーは、受け取る人という意味があるので、&lt;br &#x2F;&gt;
メソッドが呼び出される側というニュアンスでオブジェクトのことを、&lt;br &#x2F;&gt;
レシーバーといったりします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;それぞれ、指しているものは似たようなものですが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;関係性の中で、どの関係を重視しているかによって、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;呼び方が変わっているような感じですかね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、混乱するし、細かい言葉遊びの域のような気もするので、&lt;br &#x2F;&gt;
どれも似たようなものを言っているんだな〜で良いと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mesotudo&quot;&gt;メソッド&lt;&#x2F;h3&gt;
&lt;p&gt;これは、オブジェクトの振る舞いを表します。&lt;br &#x2F;&gt;
先程のクラス名簿で考えると、実際の生徒が歩いたり、&lt;br &#x2F;&gt;
授業中に寝たりみたいな振る舞いはメソッドに当たりますね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kurasunoshi-zhuang&quot;&gt;クラスの実装&lt;&#x2F;h2&gt;
&lt;p&gt;Rubyにおいて、クラス定義は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;StudentMember&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいな感じで定義します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;StudentMemberというのがクラス名です。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
（先程のクラス名簿に寄せました、冗長ですね）&lt;&#x2F;p&gt;
&lt;p&gt;クラス名は、大文字で始めます。&lt;br &#x2F;&gt;
キャメルケースとかパスカルケースで書くのが通例なので、&lt;br &#x2F;&gt;
Student_Memberとかじゃなくて、&lt;br &#x2F;&gt;
StudnetMemberですね。&lt;&#x2F;p&gt;
&lt;p&gt;StudentMemberだと冗長なので、&lt;br &#x2F;&gt;
以下、Studentにします。&lt;&#x2F;p&gt;
&lt;p&gt;クラスをインスタンス化する場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でできます。&lt;&#x2F;p&gt;
&lt;p&gt;このnewメソッドを呼び出した際、&lt;br &#x2F;&gt;
インスタンスの初期化に当たるので、&lt;br &#x2F;&gt;
initializeメソッドが定義されている場合、&lt;br &#x2F;&gt;
そこが呼ばれます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;今日から入学しました&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 今日から入学しましたと表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;initializeメソッドに引数をつけると、&lt;br &#x2F;&gt;
newする際に、その引数を渡す必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;今日から入学しました、出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番の&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 今日から入学しました、出席番号12番の斎藤太郎です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;insutansumesotudo&quot;&gt;インスタンスメソッド&lt;&#x2F;h3&gt;
&lt;p&gt;インスタンスメソッドとは、クラス構文の内部で定義されたメソッドで、&lt;br &#x2F;&gt;
インスタンスに対して、呼び出すメソッドです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;今日から入学しました、出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番の&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;今日は1キロ歩いたぜ&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# このstudent変数がStundentクラスのインスタンス。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# インスタンス自体は #&amp;lt;Student:0x00007fa3e211e620&amp;gt;みたいな感じ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;walk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;insutansubian-shu&quot;&gt;インスタンス変数&lt;&#x2F;h3&gt;
&lt;p&gt;インスタンス変数は、クラス内部で使用する、&lt;br &#x2F;&gt;
同じインスタンスの内部で共有される変数のことです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyでは@ 変数みたいな記法で定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;佐藤桃子&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 24&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;introduce&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 斎藤太郎と申します。出席番号12番です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student2.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;introduce&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 佐藤桃子と申します。出席番号24番です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;インスタンス変数の注意点としては、&lt;br &#x2F;&gt;
&lt;strong&gt;作成または代入前にいきなり使用してもエラーにならず、nilを返すという点です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、バグを発見しにくくなるときがあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@nane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #typoしてみた&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span&gt; @nana.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nil?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # いきなり使ってもnilと返るだけでエラーにならず&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;introduce&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # と申します。出席番号12番です。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# あれ、名前が表示されていないぞ？&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;akusesamesotudo&quot;&gt;アクセサメソッド&lt;&#x2F;h3&gt;
&lt;p&gt;また、インスタンス変数は、クラス外部からは参照できません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# よっしゃさっき@nameに値を格納したはずだから取得してみよう&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # nilが返るだけ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# とやっても取れない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h4 id=&quot;getuta&quot;&gt;ゲッター&lt;&#x2F;h4&gt;
&lt;p&gt;インスタンス変数の値を取得した場合は、&lt;br &#x2F;&gt;
それ用のメソッドを作る必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # こいつ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これのように値を取得するメソッドをゲッターメソッドといいます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;setuta&quot;&gt;セッター&lt;&#x2F;h4&gt;
&lt;p&gt;インスタンス変数の値を変更したい場合は、&lt;br &#x2F;&gt;
=で終わるメソッドを定義して実現します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; name=&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;val&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;仮面ライダー&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これ紛らわしいですが、&lt;br &#x2F;&gt;
student1.name = &#x27;仮面ライダー&#x27;の部分は、&lt;br &#x2F;&gt;
代入ではなく、name=メソッドの呼び出しになっています。&lt;&#x2F;p&gt;
&lt;p&gt;これのように、値を書き込むメソッドをセッターメソッドといいます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;attr-accessor&quot;&gt;attr_accessor&lt;&#x2F;h4&gt;
&lt;p&gt;上記のようなセッターやゲッターの記述は、&lt;br &#x2F;&gt;
Rubyでは&lt;strong&gt;attr_accessorという記法で省略することができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # attr_accessorで下記の2つのメソッドを定義する必要がなくなる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # def name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  #   @name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # def name=(val)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  #   @name = val&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;仮面ライダー&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; student1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;読み取りだけにしたい場合は、&lt;br &#x2F;&gt;
attr_readerを、&lt;&#x2F;p&gt;
&lt;p&gt;書き込みだけにしたい場合は、&lt;br &#x2F;&gt;
attr_writerを使うこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;object-orientation&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kurasumesotudo&quot;&gt;クラスメソッド&lt;&#x2F;h3&gt;
&lt;p&gt;上記は、クラス構文の内部で定義されるインスタンスメソッドが中心だったのに対し、&lt;br &#x2F;&gt;
クラス自体に定義するクラスメソッドというものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;記法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; self.study&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;学生の本分は勉強にあります&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;study&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 学生の本分は勉強にあります&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という記法と、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # def self.study&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  #   puts &amp;quot;学生の本分は勉強にあります&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  class&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt; self&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; study&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;      puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;学生の本分は勉強にあります&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;study&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 学生の本分は勉強にあります&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という2つの記法があります。&lt;&#x2F;p&gt;
&lt;p&gt;クラスメソッド自体、インスタンスメソッドに比べると、&lt;br &#x2F;&gt;
やや使用頻度が低いので、一概にどちらの記法が良いということはないと思いますが、&lt;br &#x2F;&gt;
前者の方が比較的よく見かける気がします。&lt;&#x2F;p&gt;
&lt;p&gt;後者の記法は、クラスメソッドを大量に定義する場合は、&lt;br &#x2F;&gt;
何度もselfを書く必要がなくなるので良いでしょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;classniokeruding-shu-tobian-shu&quot;&gt;classにおける定数と変数&lt;&#x2F;h3&gt;
&lt;p&gt;定数は、大文字で始まる、慣習的に大文字やアンダースコアで構成されるものですが、&lt;br &#x2F;&gt;
変数と違い、定数はインスタンスメソッドやクラスメソッドなどの中からも、&lt;br &#x2F;&gt;
参照することができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  PRICE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;定数の値段です100&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;変数の値段です300&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  # ここは両方問題ない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; PRICE &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; price&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span&gt; price &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#  undefined local variable or method `price&amp;#39; for #&amp;lt;Student:0x00007f909891c528&amp;gt; (NameError)になる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span&gt; PRICE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 問題なく出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;細かい変数と定数の違いは、&lt;br &#x2F;&gt;
下記のドキュメントに詳しくあるので、&lt;br &#x2F;&gt;
参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;doc&#x2F;spec=2fvariables.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;doc&#x2F;spec=2fvariables.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また下記の記事でも軽く触れています。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;なお、定数は、クラスの外部から参照することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  PRICE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;定数の値段です100&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 定数はクラスの外部から取得することもできる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;font-style: italic;text-decoration: underline;&quot;&gt;::&lt;&#x2F;span&gt;&lt;span&gt;PRICE&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;mesotudonoke-shi-xing&quot;&gt;メソッドの可視性&lt;&#x2F;h2&gt;
&lt;p&gt;さて、いろんなメソッドを見てみましたが、&lt;br &#x2F;&gt;
これ以外にも、可視性という観点でメソッドを分類することができます。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;ポイント&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#757575&quot; bordercolor=&quot;#BDBDBD&quot; bgcolor=&quot;#ffffff&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;public&lt;&#x2F;li&gt;
&lt;li&gt;private&lt;&#x2F;li&gt;
&lt;li&gt;protected&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;のどれかという問題にあたります。&lt;br &#x2F;&gt;
※ protectedは使用頻度が2つに比べてガクッと下がる上に、privateとの違いが、&lt;br &#x2F;&gt;
ややこしいので本記事ではprotectedの解説は割愛します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;publicmesotudo&quot;&gt;publicメソッド&lt;&#x2F;h3&gt;
&lt;p&gt;publicメソッドは、クラスの外部からも呼び出せるもので、&lt;br &#x2F;&gt;
何も指定しなかったら、デフォルトでこのpublicメソッドになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;今日から入学しました、出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番の&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;今日は1キロ歩いたぜ&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# publicメソッドはクラスの外部からも呼び出せる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;walk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;privatemesotudo&quot;&gt;privateメソッド&lt;&#x2F;h3&gt;
&lt;p&gt;上記の、publicメソッドに対して、&lt;br &#x2F;&gt;
privateメソッドとは、クラスの外部から呼び出せず、&lt;br &#x2F;&gt;
内部でのみ使えるメソッドに該当します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;今日から入学しました、出席番号&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;番の&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    walk &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# ここはクラス内部だから呼び出せる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;少し歩いたから走るか&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  private&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # ここから下はprivateメソッドになる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; walk&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;今日は1キロ歩いたぜ&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Student&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;斎藤太郎&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 12&lt;&#x2F;span&gt;&lt;span&gt;) &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# ここはクラス外部だからエラーになる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;walk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # private method `walk&amp;#39; called for #&amp;lt;Student:0x00007fdf9b91d570&amp;gt; (NoMethodError)となる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ji-cheng&quot;&gt;継承&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;継承とは、既にあるクラスの内容をもとにして、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;別のクラスを作ることで、文字通り既存クラスを継承した、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;新しいクラスを定義することです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  attr_accessor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;と申します。出席番号は&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@attendance_number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;LiteratureStudent&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;font-style: italic;text-decoration: underline;&quot;&gt;Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; attendance_number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; favorite_book&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; favorite_author&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;    # @name = name # これは親クラスにも存在している&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    super&lt;&#x2F;span&gt;&lt;span&gt;(name, attendance_number)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @favorite_book&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; favorite_book&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @favorite_author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; favorite_author&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    super&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;愛読書は&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@favorite_book&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;で、好きな作家は&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;@favorite_author&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;literature_student&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; LiteratureStudent&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;太宰&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;「心」&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;夏目漱石&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; literature_student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # 親クラスでattr_accessorでnameが定義されているので、子クラスで定義しなくても呼び出せる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;literature_student.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の場合、LiteratureStudentというものが、&lt;br &#x2F;&gt;
Studentクラスを継承した新しいクラスに該当します。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、Studentクラスは、LiteratureStudentクラスの**スーパークラス（親クラス)&lt;strong&gt;と言います。&lt;br &#x2F;&gt;
逆にLiteratureStudentクラスは、Studentクラスの&lt;&#x2F;strong&gt;サブクラス（子クラス）**と言います。&lt;&#x2F;p&gt;
&lt;p&gt;継承は、スーパークラスの機能を引き継ぐものであるため、&lt;br &#x2F;&gt;
基本的には、サブクラスはスーパークラスの一種というように、&lt;br &#x2F;&gt;
包含関係であることが理想です。&lt;&#x2F;p&gt;
&lt;p&gt;文学部の学生は、学生という概念の一種と言えそうなので、&lt;br &#x2F;&gt;
とりあえず、継承関係にはありそうですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;&quot;&gt;以前の記事&lt;&#x2F;a&gt;で、&lt;br &#x2F;&gt;
すべてがオブジェクトということについて解説したように、&lt;br &#x2F;&gt;
Rubyの場合、継承関係の頂点にBasicObjectというものが存在します。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、文字列とか数値とか当たり前に使っているものも、&lt;br &#x2F;&gt;
実はこうしたものを継承したオブジェクトに過ぎないということがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、class Userのようにただのクラス定義は、&lt;br &#x2F;&gt;
デフォルトでObjectクラスを継承しています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;supakurasunomesotudowohu-bu&quot;&gt;スーパークラスのメソッドを呼ぶ&lt;&#x2F;h3&gt;
&lt;p&gt;先程の、継承したクラスをもう一度見てみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;class Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  attr_accessor :name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  def initialize(name, attendance_number)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @name = name # 引数のnameを@nameというインスタンス変数に格納する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @attendance_number = attendance_number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  def introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    puts &amp;quot;#{@name}と申します。出席番号は#{@attendance_number}です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;class LiteratureStudent &amp;lt; Student&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  def initialize(name, attendance_number, favorite_book, favorite_author)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    # @name = name # これは親クラスにも存在している&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    super(name, attendance_number)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @favorite_book = favorite_book&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @favorite_author = favorite_author&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  def introduce # オーバーライド&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    super&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    puts &amp;quot;愛読書は#{@favorite_book}で、好きな作家は#{@favorite_author}です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;literature_student = LiteratureStudent.new(&amp;#39;太宰&amp;#39;, 5, &amp;#39;「心」&amp;#39;, &amp;#39;夏目漱石&amp;#39;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;puts literature_student.name # 親クラスでattr_accessorでnameが定義されているので、子クラスで定義しなくても呼び出せる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;literature_student.introduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここで、superという記法に注目します。&lt;br &#x2F;&gt;
これで親クラスの同名メソッドを呼び出します。&lt;&#x2F;p&gt;
&lt;p&gt;なお、上記のコードでいうと、&lt;br &#x2F;&gt;
introduceメソッドの内容が、&lt;br &#x2F;&gt;
子クラスの場合で変わっていると思いますが、&lt;br &#x2F;&gt;
このように&lt;strong&gt;同名メソッドを子クラスの方で上書きすることをオーバーライド&lt;&#x2F;strong&gt;と言います。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vim&#x2F;NeoVimマクロ】作成&#x2F;保存&#x2F;追記&#x2F;定義&#x2F;格納場所など使用例も解説</title>
        <published>2023-05-27T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/recording/"/>
        <id>https://reisuta.com/recording/</id>
        
        <content type="html" xml:base="https://reisuta.com/recording/">&lt;p&gt;本記事では、Vimのマクロについて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;マクロは、Vimの機能の中でも、&lt;br &#x2F;&gt;
応用的なトピックだと思いますが、&lt;br &#x2F;&gt;
使いこなせると便利なので、本記事で作成、保存、定義、&lt;br &#x2F;&gt;
格納場所といった基本事項を解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Vimの基本を学習したい方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;を先に御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;本記事の内容は、下記の動画でも&lt;br &#x2F;&gt;
ご紹介しているので、動画でハンズオンしたい方は、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;GQFQ0Rrmyro&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;makurotoha&quot;&gt;マクロとは？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;Vimのマクロとは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;一連の作業とかを保存して、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;効率化したいときに使える、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;自動化処理の方法です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;レコーディングといったりすることもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;qキー押して、&lt;br &#x2F;&gt;
任意のレジスタを指定すると、&lt;br &#x2F;&gt;
マクロの記録を開始し、&lt;br &#x2F;&gt;
recording @ eみたいな感じで表示されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;recording&#x2F;Screenshot-2023-05-27-at-15.03.08.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;aレジスタにマクロを記録したいときは、&lt;br &#x2F;&gt;
ノーマルモードでqaとすればレコーディング開始となります。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;終了するときは、もう一度qキーを押します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;マクロは、レジスタに保存される&lt;&#x2F;strong&gt;ので、&lt;br &#x2F;&gt;
名前付きレジスタになにか格納していたとき、&lt;br &#x2F;&gt;
同じレジスタを指定するとマクロで上書きされてしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、レジスタ周りで衝突しないよう注意する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;レジスタって何？っていう人は&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;register&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で解説しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;makuronoshi-xing&quot;&gt;マクロの実行&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;マクロを実行するときは、&lt;br &#x2F;&gt;
@ {register}でできます。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;@@ だと直前に呼び出されたマクロを実行できます。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;試しにちょっとしたマクロを作成してみます。&lt;br &#x2F;&gt;
次のようなコードが合ったとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;Shougo&#x2F;vimproc.vim&amp;#39;, {&amp;#39;do&amp;#39; : &amp;#39;make&amp;#39;} &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;ycm-core&#x2F;YouCompleteMe&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;vim-test&#x2F;vim-test&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;vim-scripts&#x2F;ScrollColors&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;kyazdani42&#x2F;blue-moon&amp;#39;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;AlessandroYorba&#x2F;Breve.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このファイルで、Plugのあとに、,を入力するマクロを作成してみようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;下記のような手順です。&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;順序&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#757575&quot; bordercolor=&quot;#BDBDBD&quot; bgcolor=&quot;#ffffff&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;まず、一番上の行にカーソルをおいて、qqとかでレコーディング開始。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;0で先頭にカーソルを持っていき、&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;fgで直近のgにカーソルを持っていき、&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;aでインサートに入り、,を入力しesc。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;最後にjで下の行に移動し、qを押しレコーディング終了。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;qq 0fga, &amp;lt;esc&amp;gt; j qという流れになります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;makurowobing-lie-nishi-xing-suru&quot;&gt;マクロを並列に実行する&lt;&#x2F;h3&gt;
&lt;p&gt;通常どおり、マクロを@ qとかで&lt;br &#x2F;&gt;
実行すると、直列で実行され途中でエラーがあれば止まってしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;Shougo&#x2F;vimproc.vim&amp;#39;, {&amp;#39;do&amp;#39; : &amp;#39;make&amp;#39;} &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;ycm-core&#x2F;YouCompleteMe&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;vim-test&#x2F;vim-test&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot; 邪魔するぜーーー&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;vim-scripts&#x2F;ScrollColors&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Plug &amp;#39;kyazdani42&#x2F;blue-moon&amp;#39;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;AlessandroYorba&#x2F;Breve.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じで、規則性に合わないコードが途中に混ざると、&lt;br &#x2F;&gt;
上記のマクロの場合、fgのところで&lt;br &#x2F;&gt;
gが見つからず、そこで処理が止まります。&lt;&#x2F;p&gt;
&lt;p&gt;こういった問題を回避するには、&lt;br &#x2F;&gt;
&lt;strong&gt;並列に実行する方法があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;マクロの内容は、&lt;br &#x2F;&gt;
qq 0fga, &amp;lt;esc&amp;gt; q&lt;br &#x2F;&gt;
と、jで下の行に進む以外は同じです。&lt;&#x2F;p&gt;
&lt;p&gt;その後に、Vで行をヴィジュアルモードで選択して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;:&amp;#39;&amp;lt;,&amp;#39;&amp;gt;normal @@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でマクロを実行します。&lt;&#x2F;p&gt;
&lt;p&gt;こうすると、並列に実行されるため、&lt;br &#x2F;&gt;
こける行があっても、他の行は正常に実行されます。&lt;&#x2F;p&gt;
&lt;p&gt;これはそれぞれの呼び出しが独立しているからです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;makuronozhui-ji&quot;&gt;マクロの追記&lt;&#x2F;h3&gt;
&lt;p&gt;マクロを記録する際、&lt;br &#x2F;&gt;
「jするの忘れた！」ってなった際、&lt;br &#x2F;&gt;
また、1からqqなんてすると、&lt;br &#x2F;&gt;
以前のマクロは上書きされてしまいます。&lt;&#x2F;p&gt;
&lt;p&gt;その場合は、マクロに追記すると良いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;追記する際は、qQとレジスタを大文字にすれば大丈夫です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;makuroshi-yong-li&quot;&gt;マクロ使用例&lt;&#x2F;h2&gt;
&lt;p&gt;以下、マクロの使用例をご紹介します。&lt;br &#x2F;&gt;
後半では、マクロの編集とinit.vimへの定義方法などについても&lt;br &#x2F;&gt;
言及します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rubyhuairu&quot;&gt;Rubyファイル&lt;&#x2F;h3&gt;
&lt;p&gt;1つ目の例として、&lt;br &#x2F;&gt;
Rubyファイルでのマクロを取り上げます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば次のようなファイルがあるとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これを次のような感じにしたいとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Module Api&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;RailsのAPIモードとかでおなじみのネームスペースです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、マクロの手順としては、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;1、ggで先頭行に移動&lt;br &#x2F;&gt;
2、Oで上の行にinsertモード&lt;br &#x2F;&gt;
3、module Apiと入力して&amp;lt;esc&amp;gt;&lt;br &#x2F;&gt;
4、jで下の行に移動して、&amp;gt;Gで末尾の行までインデントを一段深くする&lt;br &#x2F;&gt;
5、Gで末尾にカーソルを移動し、oで下の行にinsertモード&lt;br &#x2F;&gt;
6、endと入力して&amp;lt;esc&amp;gt;で&amp;lt;&amp;lt;でインデントを戻す&lt;&#x2F;p&gt;
&lt;p&gt;このような感じになります。&lt;br &#x2F;&gt;
Railsをよく使う人は、&lt;br &#x2F;&gt;
このようなマクロをinit.vimに保存する(後述)のも面白いかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;inkurimentoxi&quot;&gt;インクリメント系&lt;&#x2F;h3&gt;
&lt;p&gt;次は、インクリメンタル系をご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;こんなファイルがあるとします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;今日はいい天気&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;昨日はまずまず&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;一昨日は普通&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;明日はおそらくいい天気&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;去年の今日はどんな天気？&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このファイルを、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1) 今日はいい天気&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2) 昨日はまずまず&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3) 一昨日は普通&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4) 明日はおそらくいい天気&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5) 去年の今日はどんな天気？&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいにインクリメントした(数字）を入れたいとします。&lt;&#x2F;p&gt;
&lt;p&gt;こうしたマクロを作るには、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;1、:let i=1で変数iの初期値を1に設定する&lt;br &#x2F;&gt;
2、qaでレジスタaにマクロを記録開始&lt;br &#x2F;&gt;
3、Iで先頭にカーソル持ってきてinsertモード&lt;br &#x2F;&gt;
4、&amp;lt;C-r&amp;gt;=i&amp;lt;CR&amp;gt;&amp;lt;esc&amp;gt;でExpressionoモードを交えつつ、変数iの値を挿入して ) でエスケープ&lt;br &#x2F;&gt;
5、:let i += 1でインクリメントk&lt;br &#x2F;&gt;
6、qで記録終了&lt;&#x2F;p&gt;
&lt;p&gt;実行する際は、こちらの場合は、&lt;br &#x2F;&gt;
並列にマクロを実行します。&lt;&#x2F;p&gt;
&lt;p&gt;こういうインクリメンタルも、&lt;br &#x2F;&gt;
地味に使う時があったりするので、&lt;br &#x2F;&gt;
覚えておくと便利かもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;makuronobian-ji&quot;&gt;マクロの編集&lt;&#x2F;h3&gt;
&lt;p&gt;次にマクロの編集についてふれます。&lt;&#x2F;p&gt;
&lt;p&gt;まず、マクロもレジスタに保存されています。&lt;&#x2F;p&gt;
&lt;p&gt;試しに、aレジスタの内容を&lt;br &#x2F;&gt;
末尾に貼り付けてみます。&lt;br &#x2F;&gt;
Gで末尾の行に移動して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;:put a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でレジスタの内容を貼り付けます。&lt;&#x2F;p&gt;
&lt;p&gt;そして、貼り付けられたものを&lt;br &#x2F;&gt;
編集して、aレジスタに保存し直すには、&lt;br &#x2F;&gt;
&lt;strong&gt;&quot;add&lt;&#x2F;strong&gt;でできます。&lt;&#x2F;p&gt;
&lt;p&gt;この操作自体は&lt;br &#x2F;&gt;
aレジスタにddで格納しているだけなので、&lt;br &#x2F;&gt;
マクロもレジスタも関係ありません。&lt;&#x2F;p&gt;
&lt;p&gt;マクロといっても、&lt;br &#x2F;&gt;
要はレジスタに格納されている、&lt;br &#x2F;&gt;
一連の操作みたいな感じだということがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;マクロの編集はこのようにして、&lt;br &#x2F;&gt;
行うこともできます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;makuronoding-yi&quot;&gt;マクロの定義&lt;&#x2F;h3&gt;
&lt;p&gt;最後にinit.vimでのマクロ定義に言及します。&lt;&#x2F;p&gt;
&lt;p&gt;頻繁に使うマクロとかは、&lt;br &#x2F;&gt;
毎度毎度レコーディングするのも面倒なので、&lt;br &#x2F;&gt;
init.vimとか.vimrcに定義してしまうと楽だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;コード例としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;let @q = &amp;#39;;;a;&amp;#39; &amp;quot; これは行末にセミコロンを入れるマクロで、qレジスタに定義している。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;これでvimを開いた段階で、&lt;br &#x2F;&gt;
すでにqレジスタにこのマクロが定義されている状態になります。&lt;&#x2F;p&gt;
&lt;p&gt;よろしければ、Qiitaの方もご覧いただけますと幸いです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【保存必須】Vimレジスタ完全解説 これだけは知っておきたい10種類のレジスタ</title>
        <published>2023-05-26T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/register/"/>
        <id>https://reisuta.com/register/</id>
        
        <content type="html" xml:base="https://reisuta.com/register/">&lt;p&gt;最近では、Neovimのプラグインが優秀すぎて、&lt;br &#x2F;&gt;
素のVimの機能を使用しなくても、&lt;br &#x2F;&gt;
十分便利に使うことがなってきたかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、プラグインを使わずとも、&lt;br &#x2F;&gt;
&lt;strong&gt;Vimには、便利な機能がたくさんあり、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;それらを使いこなしてこそ、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;真のVimmerであり、Vim教徒です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなVimの機能の中でも&lt;br &#x2F;&gt;
やや応用的でありながら、絶対に外すことはできない、&lt;br &#x2F;&gt;
レジスタについて完全解説します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;本記事の動画は、下記になります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;やや抽象的な説明が多いので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;動画でのハンズオンのほうがわかりやすいかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;SOzIHkIW8RE&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;rezisutatoha&quot;&gt;レジスタとは？&lt;&#x2F;h2&gt;
&lt;p&gt;レジスタとは、&lt;br &#x2F;&gt;
&lt;strong&gt;Vim独自のクリップボードのようなもの&lt;&#x2F;strong&gt;で、&lt;br &#x2F;&gt;
ヤンク(yy)や削除(dd)とかしたものを、&lt;br &#x2F;&gt;
このレジスタという領域に格納しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vim-jp.org&#x2F;vimdoc-ja&#x2F;usr_10.html&quot;&gt;https:&#x2F;&#x2F;vim-jp.org&#x2F;vimdoc-ja&#x2F;usr_10.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ヤンクや削除といった、&lt;br &#x2F;&gt;
Vimの基本コマンドを復習したい方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;さて、レジスタの中身を確認するには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:reg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;register&#x2F;Screenshot-2023-05-26-at-12.36.45-1024x642.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;実行すると、こんな感じで、&lt;br &#x2F;&gt;
&lt;strong&gt;現在のレジスタに格納されている一覧&lt;&#x2F;strong&gt;を確認することができます。&lt;&#x2F;p&gt;
&lt;p&gt;Nameという列に、&lt;br &#x2F;&gt;
0とか1のような数字から、&lt;br &#x2F;&gt;
aとかjみたいなアルファベット、&lt;br &#x2F;&gt;
%や:のような記号が存在します。&lt;&#x2F;p&gt;
&lt;p&gt;これらは、レジスタの名称なのですが、&lt;br &#x2F;&gt;
それぞれ異なる役割を持っています。&lt;&#x2F;p&gt;
&lt;p&gt;これらについて順に解説していきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rezisutanozhong-lei&quot;&gt;レジスタの種類&lt;&#x2F;h2&gt;
&lt;p&gt;以下、順番にそれぞれのレジスタの名称と、&lt;br &#x2F;&gt;
役割について解説していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wu-ming-rezisuta&quot;&gt;無名レジスタ (&quot;&quot;)&lt;&#x2F;h3&gt;
&lt;p&gt;無名レジスタとは何でしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;これは、平たく言うと&lt;br &#x2F;&gt;
&lt;mark&gt;デフォルトのレジスタのような感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;無名レジスタ &quot;&quot; &lt;em&gt;quote_quote&lt;&#x2F;em&gt; &lt;em&gt;quotequote&lt;&#x2F;em&gt;&lt;br &#x2F;&gt;
このレジスタには、コマンド &quot;d&quot;, &quot;c&quot;, &quot;s&quot;, &quot;x&quot; 等で削除されたテキストや、&quot;y&quot; 等&lt;br &#x2F;&gt;
のコピーコマンドでコピーされたテキストが蓄えられる。特定のレジスタが指定されて&lt;br &#x2F;&gt;
いてもいなくても関係ない (例えば &quot;xdd でもこれが使われる)。つまり無名レジスタ&lt;br &#x2F;&gt;
は最後に使われたレジスタを指していると考えられる。よって、大文字レジスタを使っ&lt;br &#x2F;&gt;
て名前つきレジスタにテキストを追加したときも、無名レジスタの中身は、その名前つ&lt;br &#x2F;&gt;
きレジスタと同じになる。&lt;br &#x2F;&gt;
例外はレジスタ &#x27;_&#x27; である。&quot;_dd は、削除されたテキストをどのレジスタにも蓄え&lt;br &#x2F;&gt;
ない。&lt;br &#x2F;&gt;
無名レジスタの中身は、レジスタを指定しない貼り付けコマンド (p や P) で使うこと&lt;br &#x2F;&gt;
ができる。加えて、このレジスタは &#x27;&quot;&#x27; という名前で使うことができる。これは、使&lt;br &#x2F;&gt;
うときには二重引用符 &#x27;&quot;&#x27; を 2 個打ち込むということである。レジスタ &quot;&quot; に対する&lt;br &#x2F;&gt;
書き込みはレジスタ &quot;0 にも書き込むことになる。&lt;br &#x2F;&gt;
{Vi ではレジスタの内容はファイルを変更するときに失われ、&#x27;&quot;&#x27; もない}&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;vim help (:h &quot;&quot;)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;つまり、何も考えず、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;ヤンクとかコピーとか削除をしていると、&lt;br &#x2F;&gt;
この無名レジスタに格納されて、&lt;br &#x2F;&gt;
貼り付けの際も、単にpとかで行うと、&lt;br &#x2F;&gt;
この無名レジスタの内容が貼り付けられるということです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そしてこの後、順に解説しますが、&lt;br &#x2F;&gt;
aとかの名前付きレジスタを指定して、&lt;br &#x2F;&gt;
そこにヤンクとかをしても、&lt;br &#x2F;&gt;
この無名レジスタにも同じものがヤンクされます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、削除・ヤンク・プットは、&lt;br &#x2F;&gt;
レジスタを指定して実行することができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;{register}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;・名前付きレジスタ(a)からpを実行したい場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;quot;ap&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;・無名レジスタ(&amp;quot;&amp;quot;)からpを実行したい場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;p または &amp;quot;&amp;quot;p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;→ レジスタを指定しないと無名レジスタが使われる。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;すなわち、&quot;と押した後に、&lt;br &#x2F;&gt;
register名を指定すると、&lt;br &#x2F;&gt;
そのレジスタの内容を、ヤンクなりできるという感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yankurezisuta-0&quot;&gt;ヤンクレジスタ（&quot;0)&lt;&#x2F;h3&gt;
&lt;p&gt;yコマンドを使うと、&lt;br &#x2F;&gt;
無名レジスタに加えて、&lt;br &#x2F;&gt;
ヤンクレジスタにもコピーされます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ヤンクレジスタは、0のことです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このレジスタは、dとかxのようなコマンドを使っても、&lt;br &#x2F;&gt;
書き変わらないので、ヤンクしたものを貼り付けるために、&lt;br &#x2F;&gt;
ddしたら、レジスタが上書きされちまった問題を&lt;br &#x2F;&gt;
防ぐことができます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fan-hao-fu-kirezisuta-1-9&quot;&gt;番号付きレジスタ (&quot;1 ~ &quot;9)&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、削除とか変更をした際に、&lt;br &#x2F;&gt;
1から順番に9までのレジスタにその内容が格納されていく。&lt;&#x2F;p&gt;
&lt;p&gt;ヤンクレジスタに対する、削除レジスタみたいな感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ming-qian-fu-kirezisuta-a-z-a-z&quot;&gt;名前付きレジスタ(&quot;a ~ &quot;z &quot;A ~ &quot;Z)&lt;&#x2F;h3&gt;
&lt;p&gt;これらのレジスタは、&lt;strong&gt;ユーザーが自由に使えるレジスタにあたります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
なにかをレジスタに格納したいとき、&lt;br &#x2F;&gt;
番号付きレジスタとかに入れてしまうと、&lt;br &#x2F;&gt;
ddとかを繰り返すうちに消えてしまうおそれがあるが、&lt;br &#x2F;&gt;
名前付きレジスタは、指定しない限りは書き換わりません。&lt;&#x2F;p&gt;
&lt;p&gt;小文字と大文字の違いは、&lt;br &#x2F;&gt;
&lt;mark&gt;小文字指定の場合、すでに格納されている内容が消えるのに対し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;大文字指定の場合、すでに格納されている内容への追記になります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xiao-xue-chu-yong-rezisuta&quot;&gt;小削除用レジスタ (&quot;-)&lt;&#x2F;h3&gt;
&lt;p&gt;これはあまり聞かないレジスタかもしれません。&lt;br &#x2F;&gt;
（それにあまり使う機会も多くないかなと思います。）&lt;&#x2F;p&gt;
&lt;p&gt;helpでは、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;小削除用レジスタ &quot;- &lt;em&gt;quote_-&lt;&#x2F;em&gt; &lt;em&gt;quote-&lt;&#x2F;em&gt;&lt;br &#x2F;&gt;
このレジスタには、範囲が1行以下の削除コマンドで削除されたテキストが蓄えられる。&lt;br &#x2F;&gt;
ただし、コマンドに [&quot;x] で別のレジスタ名を指定したときはこれには蓄えられない。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;vim help (:h &quot;-)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;となっています。&lt;&#x2F;p&gt;
&lt;p&gt;helpでは、１行以下となっているので、&lt;br &#x2F;&gt;
ddで削除した場合も格納されるとおもいきや、&lt;br &#x2F;&gt;
格納されませんでした（筆者環境の場合)&lt;&#x2F;p&gt;
&lt;p&gt;ビジュアルモードとかで、単語単位の削除で、&lt;br &#x2F;&gt;
明示的にレジスタを指定しなかった場合に、&lt;br &#x2F;&gt;
このレジスタに格納されます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;du-miqu-rizhuan-yong-rezisuta&quot;&gt;読み取り専用レジスタ (&quot;: &quot;. &quot;% )&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;&quot;&gt;&quot;:&lt;&#x2F;h4&gt;
&lt;p&gt;一番最近に実行されたコマンドラインが、&lt;br &#x2F;&gt;
格納されるレジスタです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;実行したいときは、コマンドラインモードで、&lt;br &#x2F;&gt;
@ :で実行できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-1&quot;&gt;&quot;.&lt;&#x2F;h4&gt;
&lt;p&gt;こちらは、最後に挿入されたテキストが、&lt;br &#x2F;&gt;
格納されるレジスタです。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;-2&quot;&gt;&quot;%&lt;&#x2F;h4&gt;
&lt;p&gt;カレントファイル名が、&lt;br &#x2F;&gt;
格納されるレジスタです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;buratukuhorurezisuta&quot;&gt;ブラックホールレジスタ(&quot;_)&lt;&#x2F;h3&gt;
&lt;p&gt;消去専用レジスタのことです。&lt;&#x2F;p&gt;
&lt;p&gt;vimではddとかをしても、&lt;br &#x2F;&gt;
事実上は、削除ではなくカットにあたり、&lt;br &#x2F;&gt;
番号付きレジスタとかに格納されるが、&lt;br &#x2F;&gt;
このレジスタを指定することで文字通りの削除になります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sisutemukuritupubodorezisuta&quot;&gt;システムクリップボードレジスタ(&quot;+)&lt;&#x2F;h3&gt;
&lt;p&gt;システムのクリップボードのレジスタは+にあります。&lt;&#x2F;p&gt;
&lt;p&gt;X11ウインドウシステムには、プライマリと呼ばれるクリップボードがあるらしく、&lt;br &#x2F;&gt;
＊がそのレジスタにあたります。&lt;&#x2F;p&gt;
&lt;p&gt;windowsやmacでは、これはないので、&lt;br &#x2F;&gt;
+も*もほとんど同じようなものといった感じかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Vimのhelpでは、選択範囲レジスタとなっており、&lt;br &#x2F;&gt;
難しく書かれているが、要はクリップボードの内容が、&lt;br &#x2F;&gt;
格納されているレジスタで、環境とかOSによって、&lt;br &#x2F;&gt;
+とか*になったりする感じと思っていただければ大丈夫です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zui-zhong-jian-suo-patanyong-rezisuta&quot;&gt;最終検索パターン用レジスタ (&quot;&#x2F; )&lt;&#x2F;h3&gt;
&lt;p&gt;これは割りとそのまんまで、&lt;br &#x2F;&gt;
最後に&#x2F; とかで検索したパターンの内容が、&lt;br &#x2F;&gt;
格納されるレジスタです。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドで検索することができ、&lt;br &#x2F;&gt;
例えばこれでhlsearchのハイライトを変えることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;:let @&#x2F; = &amp;quot;Plug&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、Plugというワードでハイライトします。&lt;&#x2F;p&gt;
&lt;p&gt;まあそんなに使う機会はないかもしれませんが。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;expressionrezisuta&quot;&gt;Expressionレジスタ(&quot;=)&lt;&#x2F;h3&gt;
&lt;p&gt;これは、insertモードで&amp;lt;C-r&amp;gt;=を実行して、&lt;br &#x2F;&gt;
電卓のように、計算式を入力できます。&lt;&#x2F;p&gt;
&lt;p&gt;ここまで来ると、レジスタというより電卓に近い気もします。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドラインモードで、&amp;lt;C-r&amp;gt;=を実行しても、&lt;br &#x2F;&gt;
このモードに入ることは可能です。&lt;&#x2F;p&gt;
&lt;p&gt;round(150.123)みたいに、&lt;br &#x2F;&gt;
関数のようなものを使うことも可能です。&lt;&#x2F;p&gt;
&lt;p&gt;いやでも、いつ使うねんっていうぐらい、&lt;br &#x2F;&gt;
使い所が難しいレジスタのような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;こいつを使いこなせるようになったら、&lt;br &#x2F;&gt;
結構なVim職人かなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yokushi-urezisuta&quot;&gt;よく使うレジスタ&lt;&#x2F;h2&gt;
&lt;p&gt;以上、vimのレジスタについて紹介しました。&lt;br &#x2F;&gt;
&lt;strong&gt;平たく言えば、レジスタとは、&lt;br &#x2F;&gt;
複数種類のクリップボードみたいな感じですね&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本来なら一つしかないクリップボードが、&lt;br &#x2F;&gt;
たくさんあるなんて、やっぱりVimってすごいですね。&lt;&#x2F;p&gt;
&lt;p&gt;Vimのhelpでは、&lt;br &#x2F;&gt;
代替ファイルレジスタというものもありましたが、&lt;br &#x2F;&gt;
ニッチすぎるかつ、一生使わなくてもおかしくないので、&lt;br &#x2F;&gt;
取りあげませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;今回挙げた中でも、&lt;br &#x2F;&gt;
&lt;strong&gt;一番使うのは、やはり無名レジスタで、&lt;br &#x2F;&gt;
あとは番号付きレジスタや名前付きレジスタでしょうか。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;レジスタを的確に使いこなせるようになると、&lt;br &#x2F;&gt;
一気にVimmerとしてのレベルが上がるので、&lt;br &#x2F;&gt;
ぜひともマスターしていただけると。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;873&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【凡才エンジニアの処世術】フルスタックエンジニアの本当の意味</title>
        <published>2023-05-17T00:00:00+00:00</published>
        <updated>2023-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/full-stack-engineer/"/>
        <id>https://reisuta.com/full-stack-engineer/</id>
        
        <content type="html" xml:base="https://reisuta.com/full-stack-engineer/">&lt;p&gt;エンジニア界隈では、&lt;br &#x2F;&gt;
しばしばフルスタックエンジニアという言葉を耳にします。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、このフルスタックエンジニアとは何なのでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;「フロントもバックエンドもモバイルもインフラも全てできる人？」&lt;br &#x2F;&gt;
「フロントとバックエンドができる人？」&lt;br &#x2F;&gt;
「そもそもできるってどの程度のレベル？」&lt;&#x2F;p&gt;
&lt;p&gt;など色々突っ込みどころがある言葉かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、このフルスタックエンジニアという言葉自体が&lt;br &#x2F;&gt;
気に食わないという現役エンジニアも多いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、このフルスタックエンジニアについて、&lt;br &#x2F;&gt;
私が考えるフルスタックエンジニアについて、&lt;br &#x2F;&gt;
述べていきたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事の動画バージョンは、&lt;br &#x2F;&gt;
下記になります。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;a2YetmvMuoU&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;hurusutatukuenziniatoha&quot;&gt;フルスタックエンジニアとは？&lt;&#x2F;h2&gt;
&lt;p&gt;フルスタックエンジニアとは一般的には、&lt;br &#x2F;&gt;
&lt;strong&gt;その名の通り、開発におけるすべてのスキルを&lt;br &#x2F;&gt;
備えているとされるエンジニアです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ふわっとした言葉なので、&lt;br &#x2F;&gt;
人によって定義は微妙に変わりますが、&lt;br &#x2F;&gt;
&lt;strong&gt;フロントエンドとバックエンドの両方&lt;&#x2F;strong&gt;ができるというのが最低条件でしょう。&lt;br &#x2F;&gt;
（これらに加えて、インフラやiOS, Android開発も含めて&lt;br &#x2F;&gt;
フルスタックエンジニアと定義する人もいる)&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、わかりやすさのため、&lt;br &#x2F;&gt;
&lt;strong&gt;フロントエンドとバックエンド、インフラができるエンジニアを&lt;br &#x2F;&gt;
フルスタックエンジニアと定義します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、もしかするとお気づきかもしれませんが、&lt;br &#x2F;&gt;
上記の定義にはすでに&lt;strong&gt;欠陥&lt;&#x2F;strong&gt;があります。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、「できる」ってどの程度か？&lt;br &#x2F;&gt;
フロントエンドってどこまでを指すか？&lt;br &#x2F;&gt;
バックエンドってどこまでを指すか？&lt;br &#x2F;&gt;
インフラってどこまでを指すか？&lt;&#x2F;p&gt;
&lt;p&gt;という冒頭でも触れた問題です。&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアは、&lt;br &#x2F;&gt;
大抵の場合、意味がふわっとしがちな言葉なので、&lt;br &#x2F;&gt;
とにかく「広い分野ができる」エンジニアとして認識されています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hurusutatukutozhuan-ye&quot;&gt;フルスタックと専業&lt;&#x2F;h2&gt;
&lt;p&gt;フルスタックエンジニアは、キラキラしたイメージがあるので、&lt;br &#x2F;&gt;
単にバックエンドだけできるや、フロントエンドだけできるよりも&lt;br &#x2F;&gt;
良いように思えるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;実際、良い悪いの問題で考えると、&lt;br &#x2F;&gt;
&lt;strong&gt;良いと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;広い分野の知識があることは、&lt;br &#x2F;&gt;
武器になることも多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;それに対して、専門のエンジニアは、&lt;br &#x2F;&gt;
その分野の知識しかないので、&lt;br &#x2F;&gt;
フルスタックエンジニアよりは、&lt;br &#x2F;&gt;
融通が効かなかったりします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;ca9cea4cdfdc1c2c7008eaa1712a8f3d-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;しかし、エンジニアとしてのスキルレベルが高いという&lt;br &#x2F;&gt;
観点ではフルスタックエンジニアは、&lt;br &#x2F;&gt;
専門エンジニアに劣ることがほとんどです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;（もちろん、ごく少数のフルスタックですべてのスキルレベルが高い&lt;br &#x2F;&gt;
化け物もいるかもしれませんが)&lt;&#x2F;p&gt;
&lt;p&gt;それに既に少しだけ触れましたが、&lt;br &#x2F;&gt;
このフルスタックエンジニアという言葉自体を嫌っている人も&lt;br &#x2F;&gt;
少なくない印象です。&lt;br &#x2F;&gt;
(この点について、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;jp.quora.com&#x2F;furu-sutakku-toiu-kotoba-ga-kirai-na-enjinia-ga-wari-to-iru-no-ha-naze-desu-ka&quot;&gt;面白い掲示板&lt;&#x2F;a&gt;を見つけたので掲載しておきます。)&lt;&#x2F;p&gt;
&lt;p&gt;まあ、フルスタックエンジニアという言葉から出る全能感に対して、&lt;br &#x2F;&gt;
実態は中途半端なエンジニアであることから生じる乖離が、&lt;br &#x2F;&gt;
口さきだけの印象を与えているのが原因な気はしておりますが。&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアのスキルが低いことの卑近な例だと、&lt;br &#x2F;&gt;
色々な案件を広く浅くやっているエンジニアなどがわかりやすいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;例えばSESなどで、2ヶ月間Javaの案件に入るも、&lt;br &#x2F;&gt;
3ヶ月目からは、3ヶ月間、Reactの案件に入り、&lt;br &#x2F;&gt;
その後は、Swiftの案件に2ヶ月入ったり、&lt;br &#x2F;&gt;
その後は、AWSの案件に入ったりと、&lt;br &#x2F;&gt;
プロジェクトを転々としているケースがあるとします。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、実務経験がある技術領域だけでいえば、&lt;br &#x2F;&gt;
フロント、バックエンド、モバイル、インフラ全てになるので、&lt;br &#x2F;&gt;
領域的にはフルスタックエンジニアです。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、お察しの通り、&lt;br &#x2F;&gt;
上記のエンジニアの技術レベルが高いかと考えると、&lt;br &#x2F;&gt;
かなり微妙だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;結局どれも身になっていないのではないかという&lt;br &#x2F;&gt;
不安を感じますよね。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、これは極端な例ではありますが、&lt;br &#x2F;&gt;
フルスタックエンジニアとして、専門性を高めていくには、&lt;br &#x2F;&gt;
それぞれの技術領域でそれぞれ3年以上の実務経験を積んでいかなければ&lt;br &#x2F;&gt;
ならないことを考えると、最低でも9年以上の実務経験があるエンジニアに&lt;br &#x2F;&gt;
なるので、市場にはかなり少ないことがわかります。&lt;br &#x2F;&gt;
(ちなみに、実務経験という尺度自体も多分に曖昧かつ広範な領域を含んだ言葉なので、&lt;br &#x2F;&gt;
個人的には信ぴょう性があるのか疑問があります。この点については、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;work-experience&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で詳しく考察しています。)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、フルスタックエンジニアは、&lt;br &#x2F;&gt;
化け物クラスの例で考えると、&lt;br &#x2F;&gt;
いるかどうかの幻の存在に近いので、&lt;br &#x2F;&gt;
普段フルスタックエンジニアと言っているのは、&lt;br &#x2F;&gt;
大抵の場合、それぞれを浅く広くやっているエンジニアがほとんどだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そう考えると、巷でフルスタックエンジニアと&lt;br &#x2F;&gt;
言われている人が、技術力が高いかどうかは&lt;br &#x2F;&gt;
疑問が残るところです。&lt;&#x2F;p&gt;
&lt;p&gt;もう少し深ぼっていくために、&lt;br &#x2F;&gt;
以下、それぞれのスキルスタックを大雑把にまとめてみます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hurontoendoenziniazhuan-ye&quot;&gt;フロントエンドエンジニア専業&lt;&#x2F;h3&gt;
&lt;p&gt;フロントエンド専門の人が求められる技術スタックを&lt;br &#x2F;&gt;
羅列してみます。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript &#x2F; TypeScriptに対する&lt;strong&gt;深い知識&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;node_modulesなど、JSのエコシステムについての深い理解&lt;&#x2F;li&gt;
&lt;li&gt;JavaScriptのライブラリについての知識&lt;&#x2F;li&gt;
&lt;li&gt;JSフレームワーク一つ以上に対する深い知識&lt;&#x2F;li&gt;
&lt;li&gt;最新トレンドを継続的にキャッチアップしていく素養&lt;&#x2F;li&gt;
&lt;li&gt;CSSの深い知識&lt;&#x2F;li&gt;
&lt;li&gt;UI&#x2F;UXに対する知見&lt;&#x2F;li&gt;
&lt;li&gt;Webデザインのスキルもあるといい（場合によっては必須)&lt;&#x2F;li&gt;
&lt;li&gt;APIとの接続に対する知識&lt;&#x2F;li&gt;
&lt;li&gt;バックエンドに対する最低限の理解&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;フロントエンドエンジニアの場合、&lt;br &#x2F;&gt;
とにかく、J&lt;strong&gt;avaScriptとTypeScriptへの深い理解、&lt;br &#x2F;&gt;
フレームワークに対する深い知識が求められます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それと、node_modulesなどを初めとした、&lt;br &#x2F;&gt;
JSのライブラリ周りのエコシステムについて、&lt;br &#x2F;&gt;
深い理解が求められます。&lt;&#x2F;p&gt;
&lt;p&gt;専業の場合、これらのスキルに相当自信があるのはもちろん、&lt;br &#x2F;&gt;
場合によっては、他の自信があるフロントエンドエンジニアと&lt;br &#x2F;&gt;
差別化できるぐらいのレベルが必要です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;batukuendoenziniazhuan-ye&quot;&gt;バックエンドエンジニア専業&lt;&#x2F;h3&gt;
&lt;p&gt;これに対して、バックエンド専門の場合、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;バックエンド言語最低１つに対する深い知識(できれば静的型付け)&lt;&#x2F;li&gt;
&lt;li&gt;DBに対する深い知識&lt;&#x2F;li&gt;
&lt;li&gt;APIの深い理解&lt;&#x2F;li&gt;
&lt;li&gt;アルゴリズムやCSの知見&lt;&#x2F;li&gt;
&lt;li&gt;パフォーマンスに対する知見&lt;&#x2F;li&gt;
&lt;li&gt;セキュリティーへの知見&lt;&#x2F;li&gt;
&lt;li&gt;最低限のインフラ知識&lt;&#x2F;li&gt;
&lt;li&gt;最低限のJavaScript &#x2F; TypeScript&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;バックエンドの場合、&lt;br &#x2F;&gt;
とにかく、DBやAPIの処理などの、&lt;br &#x2F;&gt;
細かいパフォーマンスやセキュリティー要件などが&lt;br &#x2F;&gt;
シビアに見られます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、これらに対する相当深い知識が求められます。&lt;&#x2F;p&gt;
&lt;p&gt;というか、ある一定以上のレベルは、&lt;br &#x2F;&gt;
専門性が高すぎてセンスや才能が必要な領域とすら思えます。&lt;&#x2F;p&gt;
&lt;p&gt;理系でCS専攻という、&lt;br &#x2F;&gt;
いわゆるエリートはバックエンド専業だったりすることが&lt;br &#x2F;&gt;
多い気がするので、基本的にバックエンド専業を目指す場合、&lt;br &#x2F;&gt;
こうしたエリート達と遜色ないレベルに達する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;またバックエンドは、プロダクトによって難易度がまちまちで、&lt;br &#x2F;&gt;
&lt;mark&gt;アルゴリズム系が複雑にからむプロダクトのバックエンド専業は、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;特にレベルが高い印象があります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;総じて、下記のようなプロダクトのバックエンド専業をしている&lt;br &#x2F;&gt;
エンジニアは相当高いスキルでしょう。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;銀行 (セキュリティー要件が厳しく、障害が一大問題になるので、止めないためにできることを考慮したりなど、バックエンドやインフラ領域において高いスキルが求められる)&lt;&#x2F;li&gt;
&lt;li&gt;仮想通貨系 (これも銀行と同様だが、こちらはそれに比べてブロックチェーンなど最新技術の動向への知見も&lt;br &#x2F;&gt;
必須だったり、複雑なアルゴリズムが必要だったりと、総じてレベルが高い）&lt;&#x2F;li&gt;
&lt;li&gt;ユーザー数が多いプロダクト（トラフィックが多いので、インフラやバックエンドのクエリー制御など、&lt;br &#x2F;&gt;
考慮することが多い）&lt;&#x2F;li&gt;
&lt;li&gt;リアルタイム性が強いプロダクト（ちょっとした時間のずれとかが障害につながるので、処理の正確さ、効率の良さなど、チューニングが難しい印象。)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;bb4081a589fdd4708ba9353abc7b42b1-1024x563.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このへんは、私の印象なので「違うよ！」って言う部分もあるかもしれませんが、&lt;br &#x2F;&gt;
概ねこのような感じだと思います。&lt;br &#x2F;&gt;
(難易度が高い理由そこじゃないよっていうのはあるかもしれないですが、&lt;br &#x2F;&gt;
難易度が高いっていうことは間違ってないと思います。）&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、バックエンドの難易度が低いのは、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;ユーザー数が少ない (処理とかインフラ構成がガバガバでもなんとかなる）&lt;&#x2F;li&gt;
&lt;li&gt;処理が単純または、バグによる損失が小さい&lt;&#x2F;li&gt;
&lt;li&gt;お金が関わらない&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;このあたりでしょうか。&lt;br &#x2F;&gt;
もちろん、バックエンド専業であれば、必ずしも難易度が低いわけでもないと思いますが、&lt;br &#x2F;&gt;
少なくとも上記よりは難易度は低いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;そう考えると、銀行系は、上記の難易度が高い4項目をすべて備えているので、&lt;br &#x2F;&gt;
やはりえぐいですね。&lt;&#x2F;p&gt;
&lt;p&gt;すでに銀行系でバックエンド専業でやられている方は尊敬します。&lt;&#x2F;p&gt;
&lt;p&gt;バックエンド専業の場合、こうしたレベルと戦う土俵に上がらなければなりません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hurusutatukuenzinia&quot;&gt;フルスタックエンジニア&lt;&#x2F;h3&gt;
&lt;p&gt;最後にフルスタックエンジニアはどうかというと、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;バックエンド言語最低一つが、最低限実装できる&lt;&#x2F;li&gt;
&lt;li&gt;フロントエンドの実装が最低限行える。&lt;&#x2F;li&gt;
&lt;li&gt;インフラの知識が最低限ある。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;おや、フロントエンドやバックエンド専業に比べて、&lt;br &#x2F;&gt;
求められる要件のレベルが下がったような。&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアは、領域の広さが売りですので、&lt;br &#x2F;&gt;
&lt;strong&gt;深さは専業よりは求められません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;フロントエンドは、JS周りのエコシステムや、&lt;br &#x2F;&gt;
複雑に入りくんだnode_modulesの構造などは、&lt;br &#x2F;&gt;
ふんわり理解でもとりあえず大丈夫で、&lt;br &#x2F;&gt;
バックエンドは、アルゴリズムやCSの知識とかはなくても、&lt;br &#x2F;&gt;
なんとかなるっていうレベルといったところでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;とりあえず、フロント、バックエンド問わず、&lt;br &#x2F;&gt;
タスクに着手できればいいっていう感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、浅く広くのスキルスタックでもいいというのが、&lt;br &#x2F;&gt;
フルスタックエンジニアの特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;（もちろん、広く深くというフルスタックエンジニアもいるにはいるでしょうが、&lt;br &#x2F;&gt;
ごく少数なので、そういうケースはカウントしないでおきます。それに大抵の場合、&lt;br &#x2F;&gt;
広く深くのフルスタックエンジニアは、どこかの専門が強いのが第一条件で、&lt;br &#x2F;&gt;
他の分野の知見もあるというパターンなので、厳密にはフルスタックエンジニアというより、&lt;br &#x2F;&gt;
専業エンジニアで異分野も強いっていうパターンだと思います。)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hurusutatukuenziniahafan-ren-nochu-shi-shu&quot;&gt;フルスタックエンジニアは凡人の処世術&lt;&#x2F;h2&gt;
&lt;p&gt;フロントエンドの専業や、&lt;br &#x2F;&gt;
バックエンドの専業は、&lt;br &#x2F;&gt;
&lt;strong&gt;求められるレベルがすごく高いです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;software-developer-gcfbb909f2_1920-1-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そのため、この領域はだれでも目指せるものではありません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
何年も経験を積むか、経験が少ないならもともとセンスがある才能豊かな人が、&lt;br &#x2F;&gt;
目指せる領域かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;たまに、未経験や駆け出しエンジニアで、&lt;br &#x2F;&gt;
バックエンドやフロントエンド志望という方がいます。&lt;&#x2F;p&gt;
&lt;p&gt;バックエンドやフロントエンドしかやらないということは、&lt;br &#x2F;&gt;
求められるレベルも数段高いということです。&lt;&#x2F;p&gt;
&lt;p&gt;未経験や駆け出しエンジニアの段階で、&lt;br &#x2F;&gt;
そのレベルを目指すのは至難の技です。&lt;&#x2F;p&gt;
&lt;p&gt;初期の段階であちこち手を出すのは&lt;br &#x2F;&gt;
中途半端ということなのかもしれませんが、&lt;br &#x2F;&gt;
未経験や駆け出しの時点で、スキルは大抵中途半端です。&lt;&#x2F;p&gt;
&lt;p&gt;だったら、中途半端らしく、&lt;br &#x2F;&gt;
色々つまみ食いするのが良いのではと思います。&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアは、&lt;br &#x2F;&gt;
名前はかっこよくて、&lt;br &#x2F;&gt;
なんともすごい人感がありますが、&lt;br &#x2F;&gt;
&lt;strong&gt;実際は、専業エンジニアになれないだけです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;専業エンジニアになれないから、&lt;br &#x2F;&gt;
相互のスキルを補完しあって、&lt;br &#x2F;&gt;
ごまかしているのです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;しかし、これは悪いことではありません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
経験が浅い段階では、むしろ&lt;br &#x2F;&gt;
このようにフルスタックエンジニアを目指すほうが理想です。&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、&lt;strong&gt;誰にでも再現性がある程度あるから&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;f92a56a164d8c7708af74bc2cc7fb30f-1024x706.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアは、&lt;br &#x2F;&gt;
&lt;strong&gt;専業に比べ、ごまかしがききます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
それに、専業の場合に突き当たる、&lt;br &#x2F;&gt;
レベルが高い壁は、フルスタックエンジニアの場合は、&lt;br &#x2F;&gt;
中途半端でも割と見逃してもらえます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、努力で目指せるものだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、フロントエンド専業の人が、&lt;br &#x2F;&gt;
JSの非同期処理を理解していなかったら、&lt;br &#x2F;&gt;
は？って感じですが、&lt;br &#x2F;&gt;
フルスタックエンジニアなら、まだ多めに見てもらえることが多いです。（多分）&lt;&#x2F;p&gt;
&lt;p&gt;バックエンド専業の人が、&lt;br &#x2F;&gt;
DB設計やクエリーのチューニングができなかったら、&lt;br &#x2F;&gt;
は？って感じですが、&lt;br &#x2F;&gt;
フルスタックエンジニアなら、多めに見てもらえることが多いです。（多分）&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、何もかもできないのは問題ですが、&lt;br &#x2F;&gt;
&lt;strong&gt;一つできないところがあっても、&lt;br &#x2F;&gt;
ほかでカバーしやすいということです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、ややフロントが強いフルスタックエンジニアの人であれば、&lt;br &#x2F;&gt;
DB設計とかはちょっと苦手だけど、その分TypeScriptとかReactは&lt;br &#x2F;&gt;
得意だからそのへんでカバーできたり、&lt;&#x2F;p&gt;
&lt;p&gt;バックエンドがやや強いフルスタックエンジニアであれば、&lt;br &#x2F;&gt;
JSの非同期処理の理解が甘くても、DB設計とかで&lt;br &#x2F;&gt;
カバーできたりといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;専業の場合は、こうはいきません。&lt;br &#x2F;&gt;
というかこのレベルだったら専業を名乗れません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kiyariachu-qi-dehurusutatukuenziniawomu-zhi-sumerituto&quot;&gt;キャリア初期でフルスタックエンジニアを目指すメリット&lt;&#x2F;h3&gt;
&lt;p&gt;フルスタックエンジニアの最大の強みは、&lt;br &#x2F;&gt;
領域の広さです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、ベテランの場合だと専門性の浅さから、&lt;br &#x2F;&gt;
デメリットになりがちですが、&lt;br &#x2F;&gt;
&lt;strong&gt;20代などのキャリア初期であれば、&lt;br &#x2F;&gt;
メリットに働くことが多いです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;色々な領域を知ることができるので、技術同士の関係性がわかる&lt;&#x2F;li&gt;
&lt;li&gt;自分の向いていそうな分野を見定められる&lt;&#x2F;li&gt;
&lt;li&gt;高い壁や専門性の高いものはフルスタックであることでごまかせる&lt;&#x2F;li&gt;
&lt;li&gt;フルスタックエンジニアから専業を目指すこともできる&lt;&#x2F;li&gt;
&lt;li&gt;その気になれば、どの専業も狙える&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;フルスタックエンジニアは、&lt;br &#x2F;&gt;
一言で言うなら、&lt;br &#x2F;&gt;
まだ飛び立つ先が決まっていないワタリドリみたいなもので、&lt;br &#x2F;&gt;
いつでも方向転換できる状態です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;sunset-g3046cae10_1920-1024x681.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;この柔軟性が最大の強みです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
なので、キャリア初期は&lt;br &#x2F;&gt;
積極的にフルスタックエンジニアを目指すべきです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gui-mo-gaxiao-saiapurinarahurusutatukuenzinianofang-gaqiang-i&quot;&gt;規模が小さいアプリならフルスタックエンジニアの方が強い&lt;&#x2F;h3&gt;
&lt;p&gt;基本的に、専業エンジニアの方が、&lt;br &#x2F;&gt;
フルスタックエンジニアよりも重宝されるまたは、&lt;br &#x2F;&gt;
レベルが高いことがほとんどですが、&lt;br &#x2F;&gt;
&lt;strong&gt;スタートアップや中小のように、&lt;br &#x2F;&gt;
そもそものアプリケーションの規模が小さい場合は別です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この場合、フロント、バックエンドという風に&lt;br &#x2F;&gt;
分業が敷かれていないことも多いので、&lt;br &#x2F;&gt;
一人で様々な領域ができるフルスタックエンジニアは重宝されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;一つ一つのスキルが中途半端でも、&lt;br &#x2F;&gt;
とにかく色々できるっていうのが重宝されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;シンプルに人手が足りていないのと、&lt;br &#x2F;&gt;
エンジニア採用に余力がないので、&lt;br &#x2F;&gt;
既にいるエンジニアで回していくしかなく、&lt;br &#x2F;&gt;
そんなとき、一人で複数分野できる人は、&lt;br &#x2F;&gt;
重宝されるという感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;冷静に考えて、バックエンド専門とか、&lt;br &#x2F;&gt;
フロントエンド専門とかのようなエンジニアがおける企業は、&lt;br &#x2F;&gt;
エンジニア採用に余力がある大企業になると思うので、&lt;br &#x2F;&gt;
なんだかんだで、一人で複数分野やるというケースは&lt;br &#x2F;&gt;
多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;また、個人開発とかにおいても、&lt;br &#x2F;&gt;
両方できたほうが便利だと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;da-di-noren-haikinarizhuan-ye-enzinianinarenai&quot;&gt;大抵の人はいきなり専業エンジニアになれない&lt;&#x2F;h3&gt;
&lt;p&gt;そして、未経験や最初のうちは、&lt;br &#x2F;&gt;
よほど優秀だとか、CS専攻とかではない限り、&lt;br &#x2F;&gt;
大抵これぐらいの中小やスタートアップの企業に&lt;br &#x2F;&gt;
エンジニアとして滑り込むことがほとんどだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ぶっちゃけた話、&lt;br &#x2F;&gt;
フルスタックエンジニアになりたくなくても、&lt;br &#x2F;&gt;
最初のうちはフルスタックエンジニアにならざるを得ないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私がまさにそうでした笑&lt;&#x2F;p&gt;
&lt;p&gt;基本的に未経験や駆け出しの段階で優秀な人って、&lt;br &#x2F;&gt;
パターンが決まっています。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;未経験といいつつ、実はインターンとかでゴリゴリ開発していた&lt;&#x2F;li&gt;
&lt;li&gt;実務は未経験だけどCS系専攻で、それ系の研究をしてた&lt;&#x2F;li&gt;
&lt;li&gt;実務は未経験だけど、競プロとかが好きかつ成績も出している&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;まあ、悲しいですけどこれが現実ですね。。。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;full-stack-engineer&#x2F;graphic-design-studio-g0ff77deef_1920-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このパターンの優秀な人達は、&lt;br &#x2F;&gt;
いきなり大企業で専業エンジニアのキャリアを進むこともあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、先述のようにこれはかなり例外的かつ、&lt;br &#x2F;&gt;
優秀な人の場合です。&lt;&#x2F;p&gt;
&lt;p&gt;彼らの場合、すでに自分の中で強い部分ができているんですよね。&lt;br &#x2F;&gt;
&lt;strong&gt;なので、そもそもまだ自分の中に強い部分ができていない場合は、&lt;br &#x2F;&gt;
それを醸成しなければなりません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その第一段階として、&lt;br &#x2F;&gt;
まずは色々見てみたくなりますよね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そのフェーズがフルスタックエンジニアです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;フルスタックエンジニアが優秀というのは、&lt;br &#x2F;&gt;
大抵の場合幻想です。&lt;&#x2F;p&gt;
&lt;p&gt;ソフトウェアの複雑さと大きさは指数関数的に&lt;br &#x2F;&gt;
増加していきますので、そこに対してどう向き合うかという問題は、&lt;br &#x2F;&gt;
相当専門性が高い領域です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、一人の人でフルスタックに文字通り&lt;br &#x2F;&gt;
専業レベルでカバーするのは、無理なのでは？と感じます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、フルスタックエンジニアは、&lt;br &#x2F;&gt;
実質は中途半端なエンジニアでしかないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、フルスタックエンジニアで、&lt;br &#x2F;&gt;
すべてのレベルが高いという10年、20年レベルの&lt;br &#x2F;&gt;
エンジニアもいるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、それもフルスタックエンジニアのキャリアではなく、&lt;br &#x2F;&gt;
専業のキャリアを選んでいたとしたら、&lt;br &#x2F;&gt;
その分野については、遥かに高いスキルになっていたことが想像できるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そう考えると、フルスタックエンジニアは、&lt;br &#x2F;&gt;
やはり相対的には一つ一つのスキルレベルは低くならざるを得ない、&lt;br &#x2F;&gt;
キャリアなのかなとも感じます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;duo-kunohurusutatukuenziniahasugokunai&quot;&gt;多くのフルスタックエンジニアはすごくない&lt;&#x2F;h3&gt;
&lt;p&gt;以上、フルスタックエンジニアは、&lt;br &#x2F;&gt;
総合的に領域が広いことが売りの中途半端なエンジニアです。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、これは悪いことではなく、&lt;br &#x2F;&gt;
柔軟性が高いことです。&lt;&#x2F;p&gt;
&lt;p&gt;それに今まで専業の人のレベルが高いという話をしましたが、&lt;br &#x2F;&gt;
世の中、&lt;strong&gt;専業だけどレベルが低い人も少なくありません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、エンジニアのレベルは企業によっても変わってきます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、フルスタックエンジニアだけど、&lt;br &#x2F;&gt;
専業の人よりも相対的にできるという場面もあるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;まあそういう場面がある時点で、&lt;br &#x2F;&gt;
そのチームのエンジニアのレベルがしれているっていうのもあるのですが、&lt;br &#x2F;&gt;
レベルが高いエンジニアの方が圧倒的に少ないので、&lt;br &#x2F;&gt;
そういうチームに入ることも多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;なので、中途半端といっても、&lt;br &#x2F;&gt;
&lt;strong&gt;なんだかんだで差別化しやすいのも魅力の一つです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので最初のうちはフルスタックエンジニアとして、&lt;br &#x2F;&gt;
様々な領域を吸収しつつ、自分の中で極めたい分野が見つかったら、&lt;br &#x2F;&gt;
そっちの専業エンジニアを目指すのが一番いいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、フルスタックエンジニアとは、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;凡人がキャリア初期に通過する、&lt;br &#x2F;&gt;
強い専業エンジニアになるための処世術であり、&lt;br &#x2F;&gt;
ステップとも言えるかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Rubyループ処理】 配列each&#x2F;map&#x2F;forやスコープ</title>
        <published>2023-05-03T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/array-block-loop/"/>
        <id>https://reisuta.com/array-block-loop/</id>
        
        <content type="html" xml:base="https://reisuta.com/array-block-loop/">&lt;p&gt;本記事では、Rubyの配列とループ処理を扱います。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyには、ブロックという特徴的な文法があり、&lt;br &#x2F;&gt;
ループ処理もそれに関連してか、&lt;br &#x2F;&gt;
他のプログラミング言語よりもメソッドがたくさんあります。&lt;&#x2F;p&gt;
&lt;p&gt;本記事ではそんなループ処理や配列について扱います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;下記の動画でRubyの文法全般について、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;動画一本で解説しているので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;良ければご参考ください。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;hMaSBbtuQnY&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;pei-lie&quot;&gt;配列&lt;&#x2F;h2&gt;
&lt;p&gt;まずは、配列からご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;配列は、他のプログラミング言語にも大抵ある、&lt;br &#x2F;&gt;
&lt;strong&gt;複数のデータを格納できるオブジェクトやデータ構造&lt;&#x2F;strong&gt;にあたります。&lt;&#x2F;p&gt;
&lt;p&gt;以前紹介したTypeScriptの記事でも、&lt;br &#x2F;&gt;
配列は出てきましたが、大まかには、&lt;br &#x2F;&gt;
そこまで大差ないので、そちらも参考にするとわかりやすいかもしれません。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-object&#x2F;#i-4&quot;&gt;（参考記事)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;記法としてはシンプルで、&lt;br &#x2F;&gt;
基本は他のプログラミング言語と大差ありません&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;003&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;004&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;005&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;添字は0スタートで、&lt;br &#x2F;&gt;
arr[0]で配列の最初の要素を取得しています。&lt;&#x2F;p&gt;
&lt;p&gt;負の数を指定することもできて、&lt;br &#x2F;&gt;
その場合、後ろから数えます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;006&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;存在しない要素を指定してもエラーにはなりませんが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;存在しない要素に指定して値を代入した場合、負の数を添え字にしたときだけ、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;エラーが起きます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そして、正の数を添え字にして、存在しない要素に値を代入した場合、&lt;br &#x2F;&gt;
問題なく代入できるが、&lt;strong&gt;指定した添え字と配列の最後の要素数に開きがある場合、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;間の部分はすべてnilで埋め尽くされます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;014&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;015&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #存在しないのでnil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;016&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #存在しないのでnil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;017&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;018&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#arr[10]に代入した際、その間はnilで埋められる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;021&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #添え字が正ならエラーにならないが負ならエラー&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;        4&lt;&#x2F;span&gt;&lt;span&gt;: from &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;Users&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;reisuta&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;rbenv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;versions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2.7&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;bin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;irb:23:in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; `&amp;lt;main&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        3: from &#x2F;Users&#x2F;reisuta&#x2F;.rbenv&#x2F;versions&#x2F;2.7.7&#x2F;bin&#x2F;irb:23:in `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;load&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        2: from &#x2F;Users&#x2F;reisuta&#x2F;.rbenv&#x2F;versions&#x2F;2.7.7&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.7.0&#x2F;gems&#x2F;irb-1.2.6&#x2F;exe&#x2F;irb:11:in `&amp;lt;top (required)&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;        1&lt;&#x2F;span&gt;&lt;span&gt;: from (irb):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;21&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IndexError (index &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;30&lt;&#x2F;span&gt;&lt;span&gt; too small &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; array;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; minimum:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;11&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;他のプログラミング言語とかだと、&lt;br &#x2F;&gt;
存在しない要素を添え字にしたら、&lt;br &#x2F;&gt;
エラーになったり、代入したりできなかったりするので、&lt;br &#x2F;&gt;
このあたりは、例外をあまり出さない自由なRubyらしさを感じますね。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの場合、他のプログラミング言語とかで&lt;br &#x2F;&gt;
例外をはきそうなことをしても、&lt;br &#x2F;&gt;
問題なかったりするので、どういうときにエラーが起きるのかを、&lt;br &#x2F;&gt;
把握しておく必要があるというのが、&lt;br &#x2F;&gt;
自由なRubyの難しさだなと感じます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;deyao-su-wozhui-jia-suru&quot;&gt;&amp;lt;&amp;lt;で要素を追加する&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;配列に要素を追加したいときは、&amp;lt;&amp;lt;を使います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;他のプログラミング言語ではあまり見られないRubyっぽい記法として&lt;br &#x2F;&gt;
&amp;lt;&amp;lt;で配列の最後に要素を追加するんですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;006&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;007&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、pushメソッドや上記で紹介した直接添え字を指定しても、&lt;br &#x2F;&gt;
要素の追加は可能です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;024&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;025&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;026&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;027&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに要素の変更も追加と同じように&lt;br &#x2F;&gt;
値を代入してできます。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの特徴として、&lt;br &#x2F;&gt;
同じことをする方法が複数存在するというのがあります。&lt;&#x2F;p&gt;
&lt;p&gt;たとえば、上記だと &amp;lt;&amp;lt; とpushメソッドなどですね。&lt;br &#x2F;&gt;
これ以外にも、Rubyにはaliasメソッドというものもあるので、&lt;br &#x2F;&gt;
どれを使えば、迷いがちなのが、&lt;br &#x2F;&gt;
他のプログラミング言語ではあまり起きない特徴なような気がしています。&lt;&#x2F;p&gt;
&lt;p&gt;全く同じ効果のメソッドであれば、&lt;br &#x2F;&gt;
どちらを使ってもいいのですが、&lt;br &#x2F;&gt;
微妙に効果が違うメソッドの場合は、&lt;br &#x2F;&gt;
条件によって使い分ける必要があるのが、&lt;br &#x2F;&gt;
Rubyですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tian-ezi-nifan-wei-wozhi-ding-suru&quot;&gt;添え字に範囲を指定する&lt;&#x2F;h3&gt;
&lt;p&gt;Rubyの便利なところとして、&lt;br &#x2F;&gt;
範囲指定というものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、他のプログラミング言語にもありますが、&lt;br &#x2F;&gt;
Rubyは結構直感的に範囲指定できる印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;通常、arr[1]みたいな感じで、&lt;br &#x2F;&gt;
要素を取得すると思いますが、&lt;br &#x2F;&gt;
Rubyは、配列の範囲を指定して取得することがしやすいです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;010&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;011&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;012&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arr[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;arr[1..3]みたいにすると、&lt;br &#x2F;&gt;
1から3の要素を取得してくれるので、&lt;br &#x2F;&gt;
配列の順番でいうと、2番目から4番目の要素を取得できます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、1..3自体は、&lt;br &#x2F;&gt;
&lt;mark&gt;範囲オブジェクトというもので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;配列特有の記法ではなく、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;オブジェクト&lt;&#x2F;mark&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;これがRubyの面白いところですね。&lt;&#x2F;p&gt;
&lt;p&gt;気軽に範囲をオブジェクトにして、&lt;br &#x2F;&gt;
渡すことができるのは、&lt;br &#x2F;&gt;
Ruby以外の言語ではそこまでし易いわけでは無い気がするので、&lt;br &#x2F;&gt;
これはRubyの良いところだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;Range.html&quot;&gt;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;Range.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rupuchu-li&quot;&gt;ループ処理&lt;&#x2F;h2&gt;
&lt;p&gt;さて、次はループ処理について、&lt;br &#x2F;&gt;
解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyにはループ処理をするための、&lt;br &#x2F;&gt;
記法が実にたくさんあります。&lt;&#x2F;p&gt;
&lt;p&gt;その中でも&lt;mark&gt;ブロックeachなどは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;一番良く使います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ブロックについては、奥が深いかつ、&lt;br &#x2F;&gt;
Rubyの根幹にかかわる、&lt;br &#x2F;&gt;
大事な文法概念なので、&lt;br &#x2F;&gt;
下記の記事でRubyのブロックについて、&lt;br &#x2F;&gt;
詳細解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;本記事でもブロックについて、&lt;br &#x2F;&gt;
軽く触れはしますが、&lt;br &#x2F;&gt;
詳細は下記の記事に譲ります。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;979&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;また、ブロック以外にも、&lt;br &#x2F;&gt;
ループ関連は色々あるのでとりあげます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;burotuku&quot;&gt;ブロック&lt;&#x2F;h3&gt;
&lt;p&gt;ブロックは、初めてRubyを学習したときに、&lt;br &#x2F;&gt;
一番良くわからない概念の一つだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そして、Rubyでは必ず使う重要なものでもあるので、&lt;br &#x2F;&gt;
Rubyの習熟度はブロックへの理解度といっても過言ではないぐらい、&lt;br &#x2F;&gt;
Rubyを使うなら重要です。&lt;&#x2F;p&gt;
&lt;p&gt;ブロックは奥が深いので、&lt;br &#x2F;&gt;
本記事では本当にかいつまんで簡単な解説にとどめます。&lt;br &#x2F;&gt;
( &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;block-proc&#x2F;&quot;&gt;詳細記事はこちら&lt;&#x2F;a&gt; )&lt;&#x2F;p&gt;
&lt;p&gt;とりあえず、ブロックは一旦&lt;br &#x2F;&gt;
&lt;strong&gt;do~endとか{}とかの塊&lt;&#x2F;strong&gt;と思っていただいて大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;本記事は、Ruby基礎編なので、&lt;br &#x2F;&gt;
ブロックは、上記のものと一旦思っておいてください。&lt;&#x2F;p&gt;
&lt;p&gt;説明するより、コードを見たほうがはやいと思うので、&lt;br &#x2F;&gt;
コードを載せます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;{}で短く書くこともできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span&gt; { |f|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span&gt; f }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記を見ると、確かにdo~endの塊があり、&lt;br &#x2F;&gt;
中にputs fがありますね。&lt;&#x2F;p&gt;
&lt;p&gt;2つ目の省略記法だと、&lt;br &#x2F;&gt;
{}の中に、同じくputs fがありますね。&lt;&#x2F;p&gt;
&lt;p&gt;平たく言えば、&lt;br &#x2F;&gt;
ブロックとはこの部分のことです。&lt;&#x2F;p&gt;
&lt;p&gt;ブロックは多くの場合、&lt;br &#x2F;&gt;
eachメソッドと一緒に使われることが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;以下詳細に解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;each&quot;&gt;each&lt;&#x2F;h3&gt;
&lt;p&gt;ブロックと一緒に使われることが多いものとして、&lt;br &#x2F;&gt;
このeachメソッドがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Array&#x2F;i&#x2F;each.html&quot;&gt;Array#each (Ruby 3.2 リファレンスマニュアル) (ruby-lang.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;各要素に対してブロックを評価します。&lt;&#x2F;p&gt;
&lt;p&gt;ブロックが与えられなかった場合は、自身と each から生成した Enumerator オブジェクトを返します。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby 3.2 リファレンスマニュアル&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;上記のコードの場合、&lt;br &#x2F;&gt;
各要素とは、[1,2,3]で&lt;br &#x2F;&gt;
ブロックは、do |f| puts f endの部分を指します。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、eachとは、&lt;br &#x2F;&gt;
要素を取り出してブロックにわたすメソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;これが事実上、他の言語でいう、&lt;br &#x2F;&gt;
for文のような機能に相当しているという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;下記の記事で、&lt;br &#x2F;&gt;
Rubyの特徴として&lt;br &#x2F;&gt;
「すべてがオブジェクトである」ということを&lt;br &#x2F;&gt;
紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;692&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;このeachとブロックの機能も、&lt;br &#x2F;&gt;
ある意味この特徴と接点があるように思えます。&lt;&#x2F;p&gt;
&lt;p&gt;他の言語でいう、for文とかは、&lt;br &#x2F;&gt;
オブジェクトに対して呼び出すのではなく、&lt;br &#x2F;&gt;
関数のような感じで、引数にオブジェクトに相当するものなどを&lt;br &#x2F;&gt;
持っていくという構文ですが、&lt;br &#x2F;&gt;
Rubyの場合、すべてがオブジェクトなので、&lt;br &#x2F;&gt;
&lt;strong&gt;このオブジェクトからメソッドを呼び出すというかたち&lt;&#x2F;strong&gt;で、&lt;br &#x2F;&gt;
eachとブロックを使った構文のほうが、この思想に近い書き方にあたるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、これは単なる私の感想なので、&lt;br &#x2F;&gt;
こういう理由でブロックやeachが尊ばれているわけでもないとは思いますが、&lt;br &#x2F;&gt;
他のプログラミング言語ではあまり登場しないブロックやeachのような記法も、&lt;br &#x2F;&gt;
「すべてがオブジェクトである」起点から考えたら、結構素直な記法に&lt;br &#x2F;&gt;
見えてこないでしょうか？&lt;&#x2F;p&gt;
&lt;h3 id=&quot;map&quot;&gt;map&lt;&#x2F;h3&gt;
&lt;p&gt;each以外にもブロックと&lt;br &#x2F;&gt;
一緒に使われることが多いメソッドとして&lt;br &#x2F;&gt;
mapもあります。&lt;&#x2F;p&gt;
&lt;p&gt;mapは、各要素にブロックを適用し、&lt;br &#x2F;&gt;
新しい配列を作成するメソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;method&#x2F;Enumerable&#x2F;i&#x2F;collect.html&quot;&gt;Enumerable#collect (Ruby 3.2 リファレンスマニュアル) (ruby-lang.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt; { |f|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span&gt; f &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt; { |f| f &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これの実行結果は、&lt;br &#x2F;&gt;
10, 20, 30と10倍したものが出力されます。&lt;&#x2F;p&gt;
&lt;p&gt;これもよく使うので、&lt;br &#x2F;&gt;
ぜひとも使いこなせるようになりたいですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mesotudo&quot;&gt;&amp;amp;:メソッド&lt;&#x2F;h4&gt;
&lt;p&gt;上記のmapメソッドのように&lt;br &#x2F;&gt;
ブロックを使うものの場合、&lt;br &#x2F;&gt;
簡潔に書く記法があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:odd?&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # [true, false, true]と出力される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# p [1,2,3].map { |f| f.odd? }の省略形&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ブロックパラメーター（|f|）が一つだけで、&lt;br &#x2F;&gt;
メソッド(odd?）に引数がなくて、&lt;br &#x2F;&gt;
ブロック内でブロックパラメーター（|f|）に対してメソッド(odd?)を1回呼び出す以外の処理がないとき、&lt;br &#x2F;&gt;
&lt;strong&gt;&amp;amp;:メソッド名&lt;&#x2F;strong&gt;という省略形を使用できます。&lt;&#x2F;p&gt;
&lt;p&gt;これは、最初にRubyを勉強しているときに遭遇すると&lt;br &#x2F;&gt;
「なんじゃこりゃ？」ってなる記法の定番ですね。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyには、省略記法がたくさんあるので、&lt;br &#x2F;&gt;
これのように省略が原型をとどめていなかったりするものもあるので、&lt;br &#x2F;&gt;
混乱しないよう気をつけたいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;for&quot;&gt;for&lt;&#x2F;h3&gt;
&lt;p&gt;ブロック周りのループ処理に触れたので、&lt;br &#x2F;&gt;
お次は、forに移りたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;他のプログラミング言語ではめちゃくちゃよく使う、&lt;br &#x2F;&gt;
あのforです。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、&lt;strong&gt;カルチャーショック。&lt;br &#x2F;&gt;
Rubyではまず使わないです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;記法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;Pythonそっくりの記法ですね。&lt;br &#x2F;&gt;
簡潔でわかりやすくて美しいなと&lt;br &#x2F;&gt;
個人的には感じます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、先述のように、&lt;br &#x2F;&gt;
Rubyにおいて、forはほとんど使われません。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyにおいて、なぜforが使われないのか、&lt;br &#x2F;&gt;
詳しい理由はわかりませんが、&lt;br &#x2F;&gt;
Rubyではeachやブロックを使った繰り返し処理がデファクトで、&lt;br &#x2F;&gt;
forを使うシーンがほぼありませんし使う必要性もあまりありません。&lt;&#x2F;p&gt;
&lt;p&gt;あと、Rubyでforを使うと、&lt;br &#x2F;&gt;
「こいつeachとかブロック知らないんか？」みたいな顔されるので、&lt;br &#x2F;&gt;
よほどの理由がない限りforを使うのは避けた方が無難だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なんというか慣習なんですかね。&lt;&#x2F;p&gt;
&lt;p&gt;PythonからRubyに来た人は、&lt;br &#x2F;&gt;
forの文法がめちゃくちゃ似ているので、&lt;br &#x2F;&gt;
forを使いたくなると思いますけど、&lt;br &#x2F;&gt;
ぐっとこらえてeachとブロック覚えましょう。&lt;&#x2F;p&gt;
&lt;p&gt;すべてがオブジェクトの思想のRubyにとっては、&lt;br &#x2F;&gt;
forは、一ミリもその思想を表現していないので、&lt;br &#x2F;&gt;
Rubyらしい記法という点では、&lt;br &#x2F;&gt;
ブロックとeachになってくるというのは、&lt;br &#x2F;&gt;
確かにという感じですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;while&quot;&gt;while&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、whileです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、他のプログラミング言語にもある、&lt;br &#x2F;&gt;
お決まりのwhileでして、&lt;br &#x2F;&gt;
Rubyも比較的似たような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;while&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;10以下です&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10以下です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10以下です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10以下です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10以下です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;10以下です&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;whileはforよりは、&lt;br &#x2F;&gt;
使うシーンはあるような気がしますが、&lt;br &#x2F;&gt;
それでもあまり使っているところを見たことがありません。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyは、eachとブロックで、&lt;br &#x2F;&gt;
ループ処理は、大抵こなせてしまうんですよね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;until&quot;&gt;until&lt;&#x2F;h3&gt;
&lt;p&gt;until文は、ちょっと珍しいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;until文は、whileの逆で、&lt;br &#x2F;&gt;
条件が偽である限り繰り返す処理です。&lt;&#x2F;p&gt;
&lt;p&gt;こういった構文がない言語もあると思うので、&lt;br &#x2F;&gt;
やや珍しいかもしれないですね。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの場合、ifの逆のような&lt;br &#x2F;&gt;
unlessのような構文があったりと、&lt;br &#x2F;&gt;
逆の文法があったりするので、&lt;br &#x2F;&gt;
どちらを使うか迷いがちですが、&lt;br &#x2F;&gt;
基本は条件が真のときに実行する、&lt;br &#x2F;&gt;
&lt;strong&gt;ifとかwhileを優先して使うでいいと思います&lt;&#x2F;strong&gt;。&lt;br &#x2F;&gt;
(whileに関しては、eachとブロックの方を優先して使うべきだと思いますが）&lt;&#x2F;p&gt;
&lt;p&gt;untilとかが乱立していると、&lt;br &#x2F;&gt;
混乱しがちな気がります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;until&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;10以下です&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rubyでは、ブロックやeachが主流なのと、&lt;br &#x2F;&gt;
untilよりもwhileのほうがいいのと、&lt;br &#x2F;&gt;
という二重の理由で、&lt;br &#x2F;&gt;
untilを使うのはよほどのことが無い限りほとんど無い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;それにuntilは、unlessよりも、&lt;br &#x2F;&gt;
脳内の切り替えリソースを消費する気がするので、&lt;br &#x2F;&gt;
読みやすいコードとしては微妙な気がします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;times&quot;&gt;times&lt;&#x2F;h3&gt;
&lt;p&gt;最後にtimesです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、意外と使う時あります&lt;&#x2F;p&gt;
&lt;p&gt;timesは、指定回数処理を繰り返したいときとかに使いやすいです。&lt;br &#x2F;&gt;
記法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;times&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;6&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;7&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;9&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;Railsのタスクとかで、&lt;br &#x2F;&gt;
timesを使うと楽な場面があったりするので、&lt;br &#x2F;&gt;
for&#x2F;while&#x2F;untilとかよりは、確実に&lt;br &#x2F;&gt;
使用頻度が高いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;timesは、範囲オブジェクトとか&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;数値オブジェクトに対して呼び出すので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;本質的にはeachと変わらないので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;「すべてがオブジェクト」の思想には&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;適っています。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それでも、使用頻度としては&lt;br &#x2F;&gt;
eachやmapのほうが多いですが。&lt;&#x2F;p&gt;
&lt;p&gt;timesは、たまに使う場面があったりしますが、&lt;br &#x2F;&gt;
あまりスマートな書き方とはみなされなかったりするので、&lt;br &#x2F;&gt;
乱発は控えておいた方が無難です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sukopu&quot;&gt;スコープ&lt;&#x2F;h2&gt;
&lt;p&gt;ブロックや変数とかを学ぶと、&lt;br &#x2F;&gt;
必ずつきまとう概念にスコープというものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;mark&gt;ブロックやfor文の中などで定義した変数が、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;その外でも有効なのかといった、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;変数の有効範囲のことをいいます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;スコープは、プログラミング言語によって微妙に異なるので、&lt;br &#x2F;&gt;
ある意味スコープの違いを知ることがプログラミング言語の学習みたいな&lt;br &#x2F;&gt;
側面もあったりするぐらい、スコープを知っておくことは重要です。&lt;&#x2F;p&gt;
&lt;p&gt;まず、ブロックの場合、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;].&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;each&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;index.rb:6:in `&amp;lt;main&amp;gt;&amp;#39;: undefined local variable or method `value&amp;#39; for main:Object (NameError)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ブロックの場合、&lt;br &#x2F;&gt;
&lt;strong&gt;ブロック内で定義した変数は、&lt;br &#x2F;&gt;
ブロックの外では参照できません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、for文とかの場合、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;..&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;この下はforの外&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;この下はforの外&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;なんと、forの場合は、&lt;br &#x2F;&gt;
&lt;strong&gt;forの中で定義した変数valueが、&lt;br &#x2F;&gt;
外でも参照できてしまいました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;スコープが外にまで広がっていますね。&lt;br &#x2F;&gt;
この特徴は、あまり見かけないので、&lt;br &#x2F;&gt;
かなり直感に反すると思います。&lt;&#x2F;p&gt;
&lt;p&gt;一般的にスコープは、内側から外を参照することはできますが、&lt;br &#x2F;&gt;
外から内側を参照できるケース(Rubyのfor)はほとんど無い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;こうなると、内と外で変数が衝突したりと、&lt;br &#x2F;&gt;
意図しない不具合につながるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;forを使うことがあまりないのも、&lt;br &#x2F;&gt;
もしかするとこの挙動が関係しているかもしれないですね。&lt;&#x2F;p&gt;
&lt;p&gt;結論、forを使うことはあまりないと思うので、&lt;br &#x2F;&gt;
そこまで重要ではないかもしれませんが、&lt;br &#x2F;&gt;
eachとforには、一応こうした違いがあるということを&lt;br &#x2F;&gt;
念頭に入れておくといいかもしれません。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby】ハッシュとシンボルについて 省略記法やシンボルと文字列の違い</title>
        <published>2023-05-03T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/hash-symbol/"/>
        <id>https://reisuta.com/hash-symbol/</id>
        
        <content type="html" xml:base="https://reisuta.com/hash-symbol/">&lt;p&gt;本記事では、Rubyの文法の中でも特徴的な、&lt;br &#x2F;&gt;
ハッシュとシンボルについて紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;特にシンボルについては、他のプログラミング言語では、&lt;br &#x2F;&gt;
あまり見かけないデータ構造かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;こうしたハッシュとシンボルについての解説と、文字列との違い、&lt;br &#x2F;&gt;
省略記法についても言及します。&lt;&#x2F;p&gt;
&lt;p&gt;本記事の動画は下記になります。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;0E5giONviGE&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;hatusiyu&quot;&gt;ハッシュ&lt;&#x2F;h2&gt;
&lt;p&gt;ハッシュというと、&lt;br &#x2F;&gt;
なんぞやって感じる人が多いと思いますが、&lt;br &#x2F;&gt;
これは要するに、他のプログラミング言語で言う、&lt;br &#x2F;&gt;
辞書とか連想配列みたいなもんで、&lt;br &#x2F;&gt;
{&#x27;taro&#x27; =&amp;gt; 100, &#x27;hanako&#x27; =&amp;gt; 200}みたいなデータ構造です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;001&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;taro&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hanako&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;taro&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hanako&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;002&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;taro&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hanako&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ハッシュもブロックも、&lt;br &#x2F;&gt;
同じ{}で定義するので紛らわしいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yao-su-noqu-de-zhui-jia-bian-geng&quot;&gt;要素の取得&#x2F;追加&#x2F;変更&lt;&#x2F;h3&gt;
&lt;p&gt;要素の追加などは、&lt;br &#x2F;&gt;
配列のときと似ており、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;004&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;takumi&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 400&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #これで追加&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 400&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;005&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;taro&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hanako&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;takumi&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;400&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;006&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;taro&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #取得したいキーを指定する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;007&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;kyoko&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #存在しないキーならnilを返す&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;といった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの配列についての解説は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;array-block-loop&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;724&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kinisinboruwoshi-u&quot;&gt;キーにシンボルを使う&lt;&#x2F;h3&gt;
&lt;p&gt;キーに文字列ではなく、&lt;br &#x2F;&gt;
シンボル(シンボルについては後述)&lt;br &#x2F;&gt;
を使うことのほうがおそらく多いので、&lt;br &#x2F;&gt;
それについても紹介します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;026&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :taro&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hanako&lt;&#x2F;span&gt;&lt;span&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:taro&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hanako&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;027&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:taro&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;キーがシンボルの場合は、&lt;br &#x2F;&gt;
省略形もあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;028&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; taro: 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; hanako: 200&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:taro&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hanako&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;029&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; money&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:taro&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hanako&lt;&#x2F;span&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;030&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;=&amp;gt; を使わないで、&lt;br &#x2F;&gt;
シンボル: 値という省略した記法が使えます。&lt;&#x2F;p&gt;
&lt;p&gt;そして、&lt;mark&gt;&lt;strong&gt;おそらくこの省略された記法が&lt;br &#x2F;&gt;
一番良く使われているかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mesotudohu-bichu-sishi-nosheng-lue&quot;&gt;メソッド呼び出し時の省略&lt;&#x2F;h3&gt;
&lt;p&gt;メソッドの引数の最後がハッシュの場合、&lt;br &#x2F;&gt;
{}を省略できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# Railsで見かける例のやつ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;stylesheet_link_tag &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;application&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; media:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;all&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;                                     &amp;#39;data-turbolinks-track&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;reload&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# 上は以下のように書いても同じ&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;stylesheet_link_tag &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;application&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; media:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;all&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;                                   &amp;#39;data-turbolinks-track&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;reload&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; print_hello&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;greet&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; options&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; options&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;print_hello&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; taro: 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; hanako: 200&lt;&#x2F;span&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;print_hello &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; taro: 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; hanako: 200&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #メソッド呼び出しの()は省略できる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;print_hello &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; taro: 100&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; hanako: 200&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #ハッシュが最後の引数なので{}は省略できる&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rubyは何をするにも&lt;br &#x2F;&gt;
省略記法があるので、&lt;br &#x2F;&gt;
Dryすぎて、逆に混乱してしまうのが悩みです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sinboru&quot;&gt;シンボル&lt;&#x2F;h2&gt;
&lt;p&gt;さて、ハッシュの次は、&lt;br &#x2F;&gt;
シンボルについて触れていきます。&lt;&#x2F;p&gt;
&lt;p&gt;シンボルは、結構Ruby独特のものかなと感じており、&lt;br &#x2F;&gt;
他のプログラミング言語ではあまり見たことがないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;Symbol.html&quot;&gt;class Symbol (Ruby 3.2 リファレンスマニュアル) (ruby-lang.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;平たく言えば、文字列と似ているものですが、&lt;br &#x2F;&gt;
文字列とも異なるといった感じです。&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;:hogeのように表します。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;009&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;010&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; Symbol&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;011&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hoge&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; String&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;sinborutowen-zi-lie-nowei-i&quot;&gt;シンボルと文字列の違い&lt;&#x2F;h3&gt;
&lt;p&gt;そもそもシンボルは、文字列っぽいですが、&lt;br &#x2F;&gt;
内部では整数として扱われているようです。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、両者を仲立ちするような存在です。&lt;&#x2F;p&gt;
&lt;p&gt;名前を管理するという役割上、シンボルと文字列は一対一に対応します。また、文字列と違い、immutable (変更不可)であり、同値ならば必ず同一です。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby 3.2 リファレンスマニュアル&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;mark&gt;そのため、&lt;strong&gt;文字列よりも高速に比較ができるようです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;加えて、&lt;strong&gt;シンボルは同じものなら、&lt;br &#x2F;&gt;
同じオブジェクトという特徴があります。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;012&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2039708&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;013&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2039708&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;014&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2039708&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;015&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hoge&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 180&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;016&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hoge&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 200&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;017&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hoge&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;object_id&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 220&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;あとは、上記のリファレンスマニュアルにもあったように、&lt;br &#x2F;&gt;
immutable(変更不可)なので、破壊的メソッドなどで書き換えられてしまうという&lt;br &#x2F;&gt;
懸念がないのがメリットかもしれません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;018&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hoge&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hoge&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;019&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; b &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :hoge&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;020&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;upcase!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;HOGE&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;021&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#破壊的メソッドによって書き換わっている&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;HOGE&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;022&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; b.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;upcase!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #破壊的メソッドは呼び出せない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Traceback (most recent call last):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;        4&lt;&#x2F;span&gt;&lt;span&gt;: from &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;Users&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;reisuta&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;rbenv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;versions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2.7&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;7&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;bin&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;irb:23:in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; `&amp;lt;main&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        3: from &#x2F;Users&#x2F;reisuta&#x2F;.rbenv&#x2F;versions&#x2F;2.7.7&#x2F;bin&#x2F;irb:23:in `&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;load&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        2: from &#x2F;Users&#x2F;reisuta&#x2F;.rbenv&#x2F;versions&#x2F;2.7.7&#x2F;lib&#x2F;ruby&#x2F;gems&#x2F;2.7.0&#x2F;gems&#x2F;irb-1.2.6&#x2F;exe&#x2F;irb:11:in `&amp;lt;top (required)&amp;gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;        1&lt;&#x2F;span&gt;&lt;span&gt;: from (irb):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;22&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;NoMethodError (undefined method &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`upcase!&amp;#39; for :hoge:Symbol)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Did you mean?  upcase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;もちろん、ケースバイケースではあるのですが、&lt;br &#x2F;&gt;
個人的には文字列とシンボルで迷ったら、&lt;br &#x2F;&gt;
可能な限りシンボルを使ったおくのが好ましいのかなと感じます。&lt;&#x2F;p&gt;
&lt;p&gt;シンボルは、シンプルなようで、&lt;br &#x2F;&gt;
意外と奥が深いので使いこなすのは、&lt;br &#x2F;&gt;
案外難しい印象です。&lt;&#x2F;p&gt;
&lt;p&gt;少しづつ慣れて、使いこなせるようになりたいですね。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby条件分岐if&#x2F;unless&#x2F;case】三項演算子やメソッド定義</title>
        <published>2023-05-02T00:00:00+00:00</published>
        <updated>2023-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/if-method/"/>
        <id>https://reisuta.com/if-method/</id>
        
        <content type="html" xml:base="https://reisuta.com/if-method/">&lt;p&gt;本記事では、Rubyにおける、&lt;br &#x2F;&gt;
条件分岐の文法とメソッドについて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの条件分岐やメソッド定義は、&lt;br &#x2F;&gt;
unless文や破壊的メソッドなど、&lt;br &#x2F;&gt;
特徴的な部分も多い印象です。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、本記事ではこれらについても&lt;br &#x2F;&gt;
詳しく触れていきます。&lt;&#x2F;p&gt;
&lt;p&gt;文字ではなく、動画で視聴したいという方は、&lt;br &#x2F;&gt;
下記の動画を御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;hIuqdNswiEQ&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;tiao-jian-fen-qi&quot;&gt;条件分岐&lt;&#x2F;h2&gt;
&lt;p&gt;まずは、条件分岐について、&lt;br &#x2F;&gt;
紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの場合、unless文などもあるので、&lt;br &#x2F;&gt;
if文から順番に紹介していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ifwen&quot;&gt;if文&lt;&#x2F;h3&gt;
&lt;p&gt;まずは、if文です。&lt;br &#x2F;&gt;
if文とは、毎度おなじみ、条件式がTrueのときに実行する、&lt;br &#x2F;&gt;
いつものやつですよね。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyのif文は、下記のように書きます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;は正の数です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;elsif&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;は100以上です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; は正の数ではありません。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;if-method&#x2F;Screen-Shot-2023-04-27-at-8.18.58.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptとかだと、条件式を( )で囲んでいたかと思いますが、&lt;br &#x2F;&gt;
Rubyでは、そんなものは必要ないので、&lt;br &#x2F;&gt;
記述がスッキリしていますね。&lt;&#x2F;p&gt;
&lt;p&gt;記法としては、Pythonが似ているかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そして、&lt;strong&gt;特徴的なのはやはりelsifの部分でしょうか。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;あまり見かけない記法なので最初は戸惑うかもしれません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(else ifとかelifとかは見かけますが)&lt;&#x2F;p&gt;
&lt;p&gt;これは、他の言語でいう、&lt;br &#x2F;&gt;
else ifを指しています。&lt;br &#x2F;&gt;
最初のif文の条件式がfalseで、&lt;br &#x2F;&gt;
else ifの条件式がtrueのときに実行したい処理を&lt;br &#x2F;&gt;
ここに書きます。&lt;&#x2F;p&gt;
&lt;p&gt;elseとかは、他のプログラミング言語と同様ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;Rubyの場合かならずendが必要なので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;忘れずに記述する必要があります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これもありそうで意外と無い気がしますね。&lt;&#x2F;p&gt;
&lt;p&gt;PythonからRubyに入ると、&lt;br &#x2F;&gt;
記法が似ている文、このendを忘れがちです&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、elsifやelseは不要なら省略することができます。&lt;br &#x2F;&gt;
このあたりは、特段他のプログラミング言語と変わりありませんね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;hou-zhi-if&quot;&gt;後置if&lt;&#x2F;h4&gt;
&lt;p&gt;さて、そんなif文ですが、&lt;br &#x2F;&gt;
Rubyで比較的よくつかう記法に、&lt;br &#x2F;&gt;
後置ifというものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;次のようなコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;は正の数です。&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;単にif文を後ろにおいただけなので、&lt;br &#x2F;&gt;
わかりやすいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;簡潔に書くのが好まれるRubyではよく使われる記法です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、elsifとかelseを交えることはできないので、&lt;br &#x2F;&gt;
複雑な条件分岐には使えません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;unless&quot;&gt;unless&lt;&#x2F;h3&gt;
&lt;p&gt;お次はunlessです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyの場合、&lt;br &#x2F;&gt;
if文だけでなく、unless文というものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;これはif文の真逆の機能でして、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;条件が偽のときに実行されるものになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;は負の数です。&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; unless&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これはすなわち、先程とは異なり、&lt;br &#x2F;&gt;
入力値が負の数の場合に、一番下のputsの命令が実行されます。&lt;&#x2F;p&gt;
&lt;p&gt;入力値が負の場合、num &amp;gt;= 0の条件式が、&lt;br &#x2F;&gt;
falseになるので、unless文が実行されるといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;unless文でも、elseを使うことができます。&lt;br &#x2F;&gt;
この辺は、if文と同様ですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; gets.to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;unless num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;#{num}は負の数です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;#{num}は正の数です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、num &amp;gt; 0の条件式がtrueの処理が、&lt;br &#x2F;&gt;
elseに渡されます。&lt;&#x2F;p&gt;
&lt;p&gt;unlessを使う場面としては、&lt;br &#x2F;&gt;
value != &#x27;valid&#x27; のように否定演算子を使った条件を、&lt;br &#x2F;&gt;
すっきり見せるために使われたりします。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、u&lt;mark&gt;nlessやifが乱立したり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;unlessを多用すると、かえってわかりづらくなるので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;if文で書いてしまうと、かなり冗長になってしまうという場合を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;のぞいて、基本unless文は使わなくてもいいかなと個人的には感じます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;「条件が偽のときに実行」って地味に、&lt;br &#x2F;&gt;
頭の中の切り替えリソースが消費されますもんね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;case-when&quot;&gt;case&#x2F;when&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、caseとwhenです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、JavaScriptで言う、switch構文のようなものとして、&lt;br &#x2F;&gt;
Rubyではcase文がそれに該当します。&lt;&#x2F;p&gt;
&lt;p&gt;これは、複数の値と比較する場合に、&lt;br &#x2F;&gt;
用いられることが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;使い方としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;case&lt;&#x2F;span&gt;&lt;span&gt; num&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;10です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;when&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;0です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;when -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;-10です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;  puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;10, 0, -10以外の数です&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という風に、&lt;br &#x2F;&gt;
caseで対象のオブジェクトなどを指定し、&lt;br &#x2F;&gt;
whenで値を指定して、その値だったときの処理を記述していく感じです。&lt;&#x2F;p&gt;
&lt;p&gt;if文で書くと、&lt;br &#x2F;&gt;
elsifが乱立して見通しが悪くなりがちなときとかには、&lt;br &#x2F;&gt;
case文を用いると便利なことが多いです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;san-xiang-yan-suan-zi&quot;&gt;三項演算子&lt;&#x2F;h3&gt;
&lt;p&gt;三項演算子は、Rubyでよく使われる印象があります。&lt;br &#x2F;&gt;
構文としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;数値を入力してください: &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; gets&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; num &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;nは0より大きい&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;0以下&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;条件式 ? 真だった場合 : 偽だった場合&lt;br &#x2F;&gt;
という風になります。&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、num &amp;gt; 0という条件式がtrueなら、&lt;br &#x2F;&gt;
value変数には、&#x27;nは0より大きい&#x27;が代入されるという流れです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyは簡潔に書くことが多いので、&lt;br &#x2F;&gt;
簡単な条件分岐の場合、三項演算子とかで、&lt;br &#x2F;&gt;
一行で済ませてしまうことも多いので、&lt;br &#x2F;&gt;
覚えておくと役立つと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、三項演算子自体は、&lt;br &#x2F;&gt;
他のプログラミング言語にもありますし、&lt;br &#x2F;&gt;
Vue.jsとかのマスタッシュ構文とかでは、&lt;br &#x2F;&gt;
めちゃくちゃ三項演算子が使われている印象があります。&lt;br &#x2F;&gt;
(Vue.jsのマスタッシュ構文については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vue3-init&#x2F;#refcomputed&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で言及しています。)&lt;&#x2F;p&gt;
&lt;p&gt;なので、三項演算子は、&lt;br &#x2F;&gt;
Rubyでもガンガン使っている印象がありますが、&lt;br &#x2F;&gt;
特段Rubyの特徴というわけでもないかなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mesotudoding-yi&quot;&gt;メソッド定義&lt;&#x2F;h2&gt;
&lt;p&gt;条件分岐の文法について、&lt;br &#x2F;&gt;
紹介したので、次はメソッド周りに移ります。&lt;&#x2F;p&gt;
&lt;p&gt;これは個人的な体感ベースでしか有りませんが、&lt;br &#x2F;&gt;
Ruby界隈では、あまり関数という呼び方をしていない印象がありまして、&lt;br &#x2F;&gt;
大抵メソッドと呼んでいるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、メソッドは、関数のことを指しています。&lt;br &#x2F;&gt;
(関数って何って言う人は、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-func&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で関数自体について解説しています)&lt;&#x2F;p&gt;
&lt;p&gt;Rubyでのメソッドの定義は、&lt;br &#x2F;&gt;
次のようにします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; add_numbers&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;num1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; num2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  sum&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; num1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;+&lt;&#x2F;span&gt;&lt;span&gt; num2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; add_numbers&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;結果は &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;result&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Pythonと非常に似ていますね。&lt;br &#x2F;&gt;
JavaScriptとかでいうfunctionの記法ではないということですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;def メソッド名&lt;br &#x2F;&gt;
end&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;という形式で定義します。&lt;br &#x2F;&gt;
ちなみに、引数がなければ、&lt;br &#x2F;&gt;
()を省略して書くことが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;メソッド名も、変数名と同じ命名ルールで、&lt;br &#x2F;&gt;
通常小文字のスネークケースです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そして特徴的なのが、&lt;mark&gt;Rubyの場合、&lt;strong&gt;最後に評価された式が、&lt;br &#x2F;&gt;
戻り値となるのでわざわざreturn文を書きません。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;他のプログラミング言語出身の人だと、&lt;br &#x2F;&gt;
ついついreturnを書いてしまいますが、&lt;br &#x2F;&gt;
返り値を返すという目的ではあまりreturnは使わず、&lt;br &#x2F;&gt;
処理を途中で抜けたいときにreturnが使われることの方が多いです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;po-huai-de-mesotudotofei-po-huai-de-mesotudo&quot;&gt;破壊的メソッドと非破壊的メソッド&lt;&#x2F;h3&gt;
&lt;p&gt;Rubyのメソッドには、&lt;br &#x2F;&gt;
例えば、nil?のように?がつくメソッドや、&lt;br &#x2F;&gt;
upcase!というように!がつくメソッドなどがあります。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、?がつくメソッドは、&lt;br &#x2F;&gt;
&lt;strong&gt;真偽値を返すメソッドにあたります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Rubyのメソッドで?がついているのを見かけたら、&lt;br &#x2F;&gt;
真偽値を判定しているものと思っていただいて大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、!がつくメソッドは、&lt;br &#x2F;&gt;
&lt;strong&gt;より破壊的なものにあたります。&lt;&#x2F;strong&gt;(破壊的メソッド)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.ruby-lang.org&#x2F;ja&#x2F;latest&#x2F;class&#x2F;String.html&quot;&gt;class String (Ruby 3.2 リファレンスマニュアル) (ruby-lang.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;破壊的とは何かというと、&lt;br &#x2F;&gt;
&lt;strong&gt;オブジェクトの内容自体を変えてしまうことを言います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;001&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;002&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;upcase&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;HELLO&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;003&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;004&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;upcase!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;HELLO&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;005&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;HELLO&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;upcaseが非破壊的なのに対し、&lt;br &#x2F;&gt;
upcaseが破壊的メソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;両者の違いとしては、呼び出したときに、&lt;br &#x2F;&gt;
破壊的メソッドのupcase!は、オブジェクトの内容自体を変えてしまうので、&lt;br &#x2F;&gt;
変数aの内容自体が大文字に変わってしまい、&lt;br &#x2F;&gt;
単にaと入力した際、中身が大文字になっています。&lt;&#x2F;p&gt;
&lt;p&gt;ややこしいのが、&lt;strong&gt;!がつくのが破壊的メソッドとは限らない&lt;&#x2F;strong&gt;ということです。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、concatメソッドなどは、&lt;br &#x2F;&gt;
!が付きませんが、破壊的メソッドです。&lt;&#x2F;p&gt;
&lt;p&gt;!が付いているメソッドと付いていないメソッドの両方がある際は、&lt;br &#x2F;&gt;
&lt;strong&gt;!のほうが破壊的というだけです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的には非破壊的メソッドのほうを使うことがいいとされていますが、&lt;br &#x2F;&gt;
破壊的メソッドを使う場面もそれなりにあるので、&lt;br &#x2F;&gt;
挙動を理解して使えるようになるのがいいと思います。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Rubyすべてがオブジェクト】変数と真偽値&#x2F;論理演算子&#x2F;コメント</title>
        <published>2023-04-27T00:00:00+00:00</published>
        <updated>2023-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/all-object/"/>
        <id>https://reisuta.com/all-object/</id>
        
        <content type="html" xml:base="https://reisuta.com/all-object/">&lt;p&gt;本記事は、Rubyの基礎文法である、&lt;br &#x2F;&gt;
&lt;mark&gt;変数や真偽値、論理演算子に触れると同時に、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;「すべてがオブジェクト」というRubyの特徴的な思想&lt;&#x2F;mark&gt;についても&lt;br &#x2F;&gt;
解説します。&lt;&#x2F;p&gt;
&lt;p&gt;この思想は、Rubyの文法の根幹になっているのと、&lt;br &#x2F;&gt;
Rubyの面白い部分でもあるので、&lt;br &#x2F;&gt;
ぜひともご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;文章ではなく、動画で視聴したいという方は、&lt;br &#x2F;&gt;
下記の動画を御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;51Oi9q8-e-E&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;subetegaobuziekutotoha&quot;&gt;すべてがオブジェクトとは？&lt;&#x2F;h2&gt;
&lt;p&gt;Rubyの代表的な特徴として、&lt;br &#x2F;&gt;
「すべてがオブジェクト」というものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;どういうこと？って感じだと思いますが、&lt;br &#x2F;&gt;
割と文字通りの意味です。&lt;&#x2F;p&gt;
&lt;p&gt;順番に解説していきます。&lt;&#x2F;p&gt;
&lt;p&gt;そもそもオブジェクト指向言語におけるオブジェクトは、&lt;br &#x2F;&gt;
クラス（設計書）の具象化したもののような形で、&lt;br &#x2F;&gt;
例えばCarクラスのオブジェクトは、&lt;br &#x2F;&gt;
実際の車で、走ったり、ブレーキーで止まったりといった振る舞い（メソッド）を&lt;br &#x2F;&gt;
持つといったイメージがありますよね。&lt;br &#x2F;&gt;
(オブジェクト指向について、ちょっと怪しいという人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;object-orientation&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で詳しく解説しているのでご参考ください。)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、他の言語では、&lt;br &#x2F;&gt;
このクラス（設計書）とオブジェクトは別物のはずですが、&lt;br &#x2F;&gt;
Rubyでは少し毛色が変わって、&lt;br &#x2F;&gt;
&lt;strong&gt;このクラスもオブジェクトにあたります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(別物であることには変わりませんが、&lt;br &#x2F;&gt;
クラス自体が親クラスのインスタンスという側面を持っているという感じです）&lt;&#x2F;p&gt;
&lt;p&gt;例えば、nilオブジェクトから親クラスを追ってみようと思います。&lt;br &#x2F;&gt;
以下は、&lt;strong&gt;irbというRubyで使えるサンドバッグ環境です(irbコマンドで起動できます)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;010&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;class&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; NilClass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;011&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; NilClass&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;superclass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; Object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;012&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Object&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;superclass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; BasicObject&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;013&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; BasicObject&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;superclass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のclassというのは、&lt;br &#x2F;&gt;
メソッドで、呼び出し元オブジェクトのクラスを返します。&lt;&#x2F;p&gt;
&lt;p&gt;superclassメソッドは、親(継承元)クラスを返します。&lt;&#x2F;p&gt;
&lt;p&gt;それで、上記の返り値を見てみると、&lt;br &#x2F;&gt;
最終的に、BasicObjectを継承していることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、&lt;mark&gt;文字列とか数値とか、nilといったものは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;BasicObjectを祖先にに持っているということです。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
(BasicObjectの親クラスは存在しないですね)&lt;&#x2F;p&gt;
&lt;p&gt;「すべてがオブジェクト」というのは、&lt;br &#x2F;&gt;
このことを指しています。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、すべてBasicObjectの子孫ということですね。&lt;&#x2F;p&gt;
&lt;p&gt;さてそんなオブジェクトですが、&lt;br &#x2F;&gt;
&lt;strong&gt;オブジェクトは、振る舞い（メソッド）を持っているので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;値に対してメソッドを呼び出すことができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;014&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;015&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;016&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;2&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;nilも&#x27;&#x27;も2もオブジェクトなので、&lt;br &#x2F;&gt;
to_sというメソッドを呼び出すことができています。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、Pythonとかだと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;str&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように、メソッドの引数にオブジェクトなどを渡していますが、&lt;br &#x2F;&gt;
Rubyの場合、オブジェクトに対して、メソッドを呼び出すというのが特徴的ですね。&lt;&#x2F;p&gt;
&lt;p&gt;これは、JavaScriptのラッパーオブジェクトに少し似ている特徴ですね。&lt;br &#x2F;&gt;
JavaScriptのラッパーオブジェクトについては、&lt;br &#x2F;&gt;
下記の記事で解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;23&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;すべてがオブジェクトとは、&lt;br &#x2F;&gt;
何かというと、上記のような特徴のことです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bian-shu&quot;&gt;変数&lt;&#x2F;h2&gt;
&lt;p&gt;変数とは？何って言う人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-variable&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で変数そのものについて、&lt;br &#x2F;&gt;
解説しているので良ければ参考にしてください&lt;&#x2F;p&gt;
&lt;p&gt;さてRubyでの変数定義は、&lt;br &#x2F;&gt;
非常にシンプルな記法で、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で足ります。&lt;&#x2F;p&gt;
&lt;p&gt;いれるだけかーいっていうぐらいシンプルな文法ですね(笑)&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptみたいに、letとかconstみたいなものをつける必要はありません&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;Rubyの変数名は、スネークケースで書くのが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;慣習というかコーディング規約で定められています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.ruby.or.jp&#x2F;ja&#x2F;tech&#x2F;development&#x2F;ruby&#x2F;050_coding_rule.html&quot;&gt;https:&#x2F;&#x2F;www.ruby.or.jp&#x2F;ja&#x2F;tech&#x2F;development&#x2F;ruby&#x2F;050_coding_rule.html&lt;&#x2F;a&gt;&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;shugo.net&#x2F;ruby-codeconv&#x2F;codeconv.html&quot;&gt;https:&#x2F;&#x2F;shugo.net&#x2F;ruby-codeconv&#x2F;codeconv.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、基本的にはスネークケースで書きます。&lt;br &#x2F;&gt;
ちなみに、スネークケース以外で書いてもエラーにはなりません。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyのちょっと面倒くさいのが、&lt;br &#x2F;&gt;
スネークケース以外の変数も宣言できてしまうので、&lt;br &#x2F;&gt;
コーディング規約でNGとされている記法も、&lt;br &#x2F;&gt;
押し通すことが可能ということです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;020&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; greetGreet &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これはすなわち、プロジェクトで、&lt;br &#x2F;&gt;
厳格に記法とかを統一しないと、&lt;br &#x2F;&gt;
コードが荒れやすいともいえますね。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、私が以前経験したPJのRubyコードは、&lt;br &#x2F;&gt;
すべての変数がキャメルケースで書かれていて絶望した経験があります。&lt;br &#x2F;&gt;
(これは、あえてそうしているとかではなく、フロントがキャメルケースだから、&lt;br &#x2F;&gt;
無思考でRubyもキャメルケースにしているだけでした。)&lt;&#x2F;p&gt;
&lt;p&gt;Rubyが一面、上級者向けといわれるのは、&lt;br &#x2F;&gt;
こういう側面にあるかもしれませんね。&lt;&#x2F;p&gt;
&lt;p&gt;自由に書くことができる分、&lt;br &#x2F;&gt;
基本的なコーディング規約とか&lt;br &#x2F;&gt;
簡潔で依存性が小さいコードを書くように心がけないと、&lt;br &#x2F;&gt;
簡単に負債化してしまうおそれがあります。&lt;&#x2F;p&gt;
&lt;p&gt;よく元々Java出身のRubyエンジニアが書くコードは綺麗と言われたりしますが、&lt;br &#x2F;&gt;
これも、このあたりに関係しているかもしれないですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、定数は、すべて大文字として定義します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;Screenshot-2023-09-14-at-16.37.44.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;いちおう、警告は出ますが、&lt;br &#x2F;&gt;
Rubyの定数は、再代入できるっちゃできてしまうので、&lt;br &#x2F;&gt;
この辺もちょっと自由すぎる匂いがしますね...&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;mark&gt;良いコードがどういうものか、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ある程度自分なりに仮説やインデックスがある人じゃないと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;コードをカオスにしてしまいやすいというのが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Rubyが上級者向けと言われる所以ですかね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;shi-zhan-kai&quot;&gt;式展開&lt;&#x2F;h3&gt;
&lt;p&gt;文字列の中で、変数の値を展開したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;021&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; greet &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;022&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hellohello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;024&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;greet.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to_s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hellohello&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という風に、&lt;strong&gt;ダブルクオートで、&lt;br &#x2F;&gt;
#{変数や式}という記法で式展開できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、シングルクオートの場合は、&lt;br &#x2F;&gt;
式展開されず、そのまま表示されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;025&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello#{greet}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#{greet}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;式展開を使わなければ、&lt;br &#x2F;&gt;
両者の挙動にさして違いはありません。&lt;&#x2F;p&gt;
&lt;p&gt;式展開というと、&lt;br &#x2F;&gt;
変数の値を埋め込むために使う機能と思われがちですが、&lt;br &#x2F;&gt;
下記のように計算することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;005&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;zhen-wei-zhi&quot;&gt;真偽値&lt;&#x2F;h2&gt;
&lt;p&gt;次にRubyにおける真偽値を紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;真偽値とは、TrueとFalseというように、&lt;br &#x2F;&gt;
真か偽を表すものですね。&lt;br &#x2F;&gt;
(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-primitive&#x2F;#boolean&quot;&gt;参考記事&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;真偽値に変換した際、&lt;br &#x2F;&gt;
何がTrueになり、&lt;br &#x2F;&gt;
何がFalseになるかというのは、&lt;br &#x2F;&gt;
プログラミング言語によって異なります。&lt;&#x2F;p&gt;
&lt;p&gt;多くのプログラミング言語では、&lt;br &#x2F;&gt;
0などはfalseになることが多いですが、&lt;br &#x2F;&gt;
Rubyにおいては、異なります。&lt;&#x2F;p&gt;
&lt;p&gt;以下詳細に解説していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;falsetonilyi-wai-zhen&quot;&gt;falseとnil以外真&lt;&#x2F;h3&gt;
&lt;p&gt;Rubyの特徴的なものとして、&lt;br &#x2F;&gt;
真偽値があります。&lt;&#x2F;p&gt;
&lt;p&gt;タイトルの通り、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;Rubyの場合、偽(false)になるのは、&lt;br &#x2F;&gt;
falseとnilだけです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;めちゃくちゃシンプルですよね。&lt;br &#x2F;&gt;
なので、他のプログラミング言語だと&lt;br &#x2F;&gt;
偽になりがちな、次の値もすべて真ということになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;#39;false&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;0や空文字列は、&lt;br &#x2F;&gt;
JavaScriptとかでは、falseに認定されるものですが、&lt;br &#x2F;&gt;
Rubyにおいては、trueと認定されます。&lt;&#x2F;p&gt;
&lt;p&gt;以下、確認してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;030&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;031&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;032&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;033&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;034&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;false&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;035&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;013&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の、&lt;strong&gt;「!」というのは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;要素の真偽値を反転させる演算子で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;例えば、aが真のときは、!aは偽となります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;「!!」というのは、反転させたものをもう一度反転させるので、&lt;br &#x2F;&gt;
結果として、&lt;strong&gt;要素の真偽値を返します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その要素の真偽値を返り値にしたいときは、&lt;br &#x2F;&gt;
たまに使う記法かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それを踏まえて、&lt;br &#x2F;&gt;
上記のコードを見ると、&lt;br &#x2F;&gt;
確かに、nilとfalse以外は、&lt;br &#x2F;&gt;
trueになっているのが確認できますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lun-li-yan-suan-zi&quot;&gt;論理演算子&lt;&#x2F;h3&gt;
&lt;p&gt;上記で、少し出てきた、&lt;br &#x2F;&gt;
「!」などですが、&lt;br &#x2F;&gt;
これらは論理演算子というものです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyで頻繁に使うものとして、&lt;br &#x2F;&gt;
&lt;strong&gt;&amp;amp;&amp;amp;や||&lt;&#x2F;strong&gt;、**!**などの論理演算子があります。&lt;&#x2F;p&gt;
&lt;p&gt;&amp;amp;&amp;amp;は、&lt;br &#x2F;&gt;
例えば、条件１&amp;amp;&amp;amp; 条件２という風に使用し、&lt;br &#x2F;&gt;
両方とも真なら、全体の式の評価も真を返すというものです。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、||は、&lt;br &#x2F;&gt;
いずれか一方が真なら真で、両方偽で偽となります。&lt;&#x2F;p&gt;
&lt;p&gt;!は、否定で&lt;br &#x2F;&gt;
真偽値を反転させます。&lt;&#x2F;p&gt;
&lt;p&gt;それぞれ、&amp;amp;&amp;amp;(and)、||(or)、!(not)のイメージに近いかなと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;036&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;037&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;038&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;039&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;040&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;041&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; !&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これらの返り値には、&lt;br &#x2F;&gt;
短絡評価というものが使われているので、&lt;br &#x2F;&gt;
短絡評価評価について解説します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;duan-luo-ping-jia&quot;&gt;短絡評価&lt;&#x2F;h4&gt;
&lt;p&gt;上記の論理演算子ですが、&lt;br &#x2F;&gt;
Rubyでよく使われるのが、&lt;br &#x2F;&gt;
短絡評価というものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;例えば次のようなコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;049&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;* class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;User&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;050&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*   attr_reader&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :email&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;051&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;052&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*   def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; initialize&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; email&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;053&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;     @name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;054&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;     @email&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; email&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;055&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*   end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;056&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;057&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*   def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;059&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;     true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;060&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*   end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;061&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;062&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;063&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; User&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;John Doe&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;john.doe@example.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #&amp;lt;User:0x00007fcd178f6bc8 @email=&amp;quot;john.doe@example.com&amp;quot;, @name=&amp;quot;John Doe&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;064&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;065&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;* if&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;066&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;   puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;ユーザーの名前は &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;067&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;* else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;068&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;   puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;この操作はログイン後にのみ利用可能です。&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;069&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ユーザーの名前は John Doe です。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; nil&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;070&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #&amp;lt;User:0x00007fcd178f6bc8 @email=&amp;quot;john.doe@example.com&amp;quot;, @name=&amp;quot;John Doe&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;071&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;072&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #&amp;lt;User:0x00007fcd178f6bc8 @email=&amp;quot;john.doe@example.com&amp;quot;, @name=&amp;quot;John Doe&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;073&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;074&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記では、オブジェクト指向を使用しているので、&lt;br &#x2F;&gt;
オブジェクト指向について確認したい場合は、&lt;br &#x2F;&gt;
こちらの記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;800&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;上記のコードの着目ポイントですが、userという変数とuserがメソッドを持っているという状況を作りたかっただけなので、&lt;br &#x2F;&gt;
&lt;strong&gt;その部分だけ着目してもらえれば大丈夫です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;重要なのは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;070&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #&amp;lt;User:0x00007fcd178f6bc8 @email=&amp;quot;john.doe@example.com&amp;quot;, @name=&amp;quot;John Doe&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;071&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;072&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; user &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;||&lt;&#x2F;span&gt;&lt;span&gt; user.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;email_verified?&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #&amp;lt;User:0x00007fcd178f6bc8 @email=&amp;quot;john.doe@example.com&amp;quot;, @name=&amp;quot;John Doe&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;073&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; user&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;irb&lt;&#x2F;span&gt;&lt;span&gt;(main):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;074&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;の部分で、||の場合、&lt;br &#x2F;&gt;
どちらかがtrueになればいいので、&lt;br &#x2F;&gt;
userの段階でtrueになることが確定し、&lt;br &#x2F;&gt;
user.email_verified?が実行されず、&lt;br &#x2F;&gt;
返り値がuserオブジェクトになっています。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、&amp;amp;&amp;amp;の場合、&lt;br &#x2F;&gt;
どちらかがfalseになった段階で、&lt;br &#x2F;&gt;
falseになることが確定するので、&lt;br &#x2F;&gt;
最後のコードのようなfalse &amp;amp;&amp;amp; userだと、&lt;br &#x2F;&gt;
falseが最初に来た段階で、userが評価されず、&lt;br &#x2F;&gt;
返り値がfalseになっています。&lt;&#x2F;p&gt;
&lt;p&gt;最初の、user &amp;amp;&amp;amp; user.email_verified?は、&lt;br &#x2F;&gt;
どちらもTrueになっているので、&lt;br &#x2F;&gt;
最後のuser.email_verified?の返り値(true)が&lt;br &#x2F;&gt;
返されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;短絡評価とは、このように、式を評価する際に、最初が条件を満たすかを判定し、&lt;br &#x2F;&gt;
条件を満たす場合にはその後の式を評価せずに処理を終了することです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これを利用すると、Trueのときには、&lt;br &#x2F;&gt;
変数代入をしたいが、Falseのときは、&lt;br &#x2F;&gt;
したくないみたいな処理を書くこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;短絡評価自体は、他のプログラミング言語にもある機能ですが、&lt;br &#x2F;&gt;
Rubyでは割と頻出なので覚えておくといいでしょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;komento&quot;&gt;コメント&lt;&#x2F;h2&gt;
&lt;p&gt;コメントとは、他のプログラミング言語においても存在するもので、&lt;br &#x2F;&gt;
該当のコードを実行させないように指定することができます。&lt;br &#x2F;&gt;
Rubyにおけるコメントは、#を使います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# この行は実行されません&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# puts &amp;#39;Hello world2&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コメントについては、シンプルですね。&lt;br &#x2F;&gt;
どういうときにコメントを書くべきかというのは、&lt;br &#x2F;&gt;
意外と難しい議論でして、人によって考え方がわかれます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、基本的に冗長なコメントは書くべきではないとされているので、&lt;br &#x2F;&gt;
下記のようなコメントは推奨されないでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello world&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # Hello worldと出力する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; # valに100を代入する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;puts&lt;&#x2F;span&gt;&lt;span&gt; val &lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#valを出力する&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こういう逐一コメントは、&lt;br &#x2F;&gt;
冗長なだけでなく、&lt;br &#x2F;&gt;
仮にval変数をval_1とかに修正した場合、&lt;br &#x2F;&gt;
コメントの方も修正する必要が出てくるため、&lt;br &#x2F;&gt;
変更に弱くなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;個人的には、コメントは書かないことが可能なら、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;書かないほうが良いと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;というのも、&lt;mark&gt;理想としては、コメントではなく&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;コードに語らせることが一番だからです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;けれども、現実問題それが難しいこともあるので、&lt;br &#x2F;&gt;
複雑なコードについては、大まかな処理の概要をコメントで残すという&lt;br &#x2F;&gt;
ことは結構あります。&lt;&#x2F;p&gt;
&lt;p&gt;無思考でコメントを書きそうになってしまったときは、&lt;br &#x2F;&gt;
コメントを書かずにわかりやすいコードを書く方法はないかと検討してみてもいいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、正直コメントに対する考え方は、&lt;br &#x2F;&gt;
チームによって異なるので、積極的にコメントを残そうという方針のチームもあります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、最終的には、チーム次第なところもありますが、&lt;br &#x2F;&gt;
コメントを書いてしまったら、コメントのメンテナンスと言う作業が増える時点で、&lt;br &#x2F;&gt;
確実に変更に弱くなるので、書かないことが可能なら、書くべきではないということは確かです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby環境構築】Rubyとは？rbenvインストールから</title>
        <published>2023-04-25T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/rbenv/"/>
        <id>https://reisuta.com/rbenv/</id>
        
        <content type="html" xml:base="https://reisuta.com/rbenv/">&lt;p&gt;本記事では、Rubyについて解説します。&lt;br &#x2F;&gt;
プログラミング言語の学習をする際は、&lt;br &#x2F;&gt;
文法なども勉強する必要がありますが、&lt;br &#x2F;&gt;
それ以外にも実行環境を構築する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、Rubyの概要から、&lt;br &#x2F;&gt;
環境構築までを解説します。&lt;&#x2F;p&gt;
&lt;p&gt;文法の詳細については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;などをご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;なお、本記事の動画は、&lt;br &#x2F;&gt;
下記になります。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;GzNPc64vhmo&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;rubytoha&quot;&gt;Rubyとは？&lt;&#x2F;h2&gt;
&lt;p&gt;まず、Rubyとは何でしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Rubyは、日本人のまつもとゆきひろ氏によって開発された、&lt;br &#x2F;&gt;
動的型付け言語です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すっきりした文法が特徴で、&lt;br &#x2F;&gt;
慣れると書きやすいですが、&lt;br &#x2F;&gt;
最初は癖があると感じるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;似ている言語としては、&lt;br &#x2F;&gt;
Pythonなどがありますが、&lt;br &#x2F;&gt;
ところどころで異なる部分も多いため、&lt;br &#x2F;&gt;
あくまで似ているだけです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyにおいて、&lt;br &#x2F;&gt;
最も特徴的なのは、&lt;br &#x2F;&gt;
「すべてがオブジェクト」という点です。&lt;&#x2F;p&gt;
&lt;p&gt;この点については、&lt;br &#x2F;&gt;
下記の記事で解説しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;692&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rubynoinsutoru&quot;&gt;Rubyのインストール&lt;&#x2F;h2&gt;
&lt;p&gt;macやlinuxの場合、&lt;br &#x2F;&gt;
デフォルトでRubyがインストールされています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin21]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、のちのちgemとかをインストールする際、&lt;br &#x2F;&gt;
rubyの細かいバージョンがネックになるので、&lt;br &#x2F;&gt;
最初からversionを切り替えられるようにしておくと便利です。&lt;&#x2F;p&gt;
&lt;p&gt;そこでバージョン管理ツールとしてよく使われている&lt;br &#x2F;&gt;
rbenvを導入します。&lt;br &#x2F;&gt;
node.jsでいうnvm的なものです。 [st-card myclass=&quot;st-no-shadow&quot; id=&quot;13&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rbenv&#x2F;rbenv&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;rbenv&#x2F;rbenv&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本は上記のドキュメントどおりに進めます。&lt;&#x2F;p&gt;
&lt;p&gt;macなら&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;brew install rbenv ruby-build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;linux(Debian, Ubuntu)なら&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sudo apt install rbenv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできます。&lt;&#x2F;p&gt;
&lt;p&gt;そして&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ rbenv init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Load rbenv automatically by appending&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# the following to ~&#x2F;.zshrc:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;eval &amp;quot;$(rbenv init - zsh)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を走らせます。&lt;&#x2F;p&gt;
&lt;p&gt;使っているシェルにrbenv initの設定を加えます。&lt;br &#x2F;&gt;
ここではzshを想定しています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;eval &amp;quot;$(rbenv init - zsh)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そして、.zshrcを再読込します。&lt;br &#x2F;&gt;
（ターミナルを開き直すかsourceコマンドを使って、&lt;br &#x2F;&gt;
再読込します。)&lt;&#x2F;p&gt;
&lt;p&gt;これでrbenvのインストールは完了です。&lt;&#x2F;p&gt;
&lt;p&gt;早速なにかrubyをインストールしてみましょう。&lt;br &#x2F;&gt;
ruby3.0.1をインストールしてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rbenv install 3.0.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただインストールしただけだと&lt;br &#x2F;&gt;
まだ反映されません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ rbenv versions&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;* system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  3.0.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;3.0.1を適用させるには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rbenv global 3.0.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を実行します。&lt;&#x2F;p&gt;
&lt;p&gt;たまにこれで切り替わらないときがあるので、&lt;br &#x2F;&gt;
その時は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ which ruby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;usr&#x2F;bin&#x2F;ruby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のように、結果が&#x2F;usr&#x2F;bin&#x2F;rubyになっている場合は、&lt;br &#x2F;&gt;
rbenvのパスに切り替わっていません。&lt;&#x2F;p&gt;
&lt;p&gt;もう一度zshを再読込して、同じのを実行してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ which ruby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;Users&#x2F;reisuta&#x2F;.rbenv&#x2F;shims&#x2F;ruby&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;今度は変わっていますね。&lt;br &#x2F;&gt;
これで反映されました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;irbwoshi-sitemiru&quot;&gt;irbを試してみる&lt;&#x2F;h3&gt;
&lt;p&gt;irbとは、Rubyの対話型の実行環境で、&lt;br &#x2F;&gt;
Rubyの挙動を手軽に試すことができます。&lt;&#x2F;p&gt;
&lt;p&gt;RailsのRails consoleに似ていますね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ irb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;irb(main):001:0&amp;gt; 1 * 42&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;=&amp;gt; 42&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;irb(main):002:0&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;抜けたいときは、exitと打てば抜けられます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rubyhuairuwoshi-xing-suru&quot;&gt;Rubyファイルを実行する&lt;&#x2F;h3&gt;
&lt;p&gt;基本的な文法は、irbだけで&lt;br &#x2F;&gt;
試すことができますが、&lt;br &#x2F;&gt;
ファイルで実行する方法も知っておくべきでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;puts &amp;#39;Hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の一行をindex.rbというファイルに追加します。&lt;br &#x2F;&gt;
そして実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby index.rb&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hello world&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;といった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;基本は、rubyコマンドで実行できます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにRubyワンライナーとしていきなりターミナルから実行することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ ruby -e &amp;#39;puts &amp;quot;Hello World&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;rubyコマンドに-eオプションを渡して&lt;br &#x2F;&gt;
実行します。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyはこのように、&lt;br &#x2F;&gt;
インストールさえしてしまえば、&lt;br &#x2F;&gt;
簡単にコードを実行できるので、&lt;br &#x2F;&gt;
ShellScriptの代わりとして使ったりもできなくはないので、&lt;br &#x2F;&gt;
シェル芸的な側面もあります。&lt;br &#x2F;&gt;
(PythonやPerlとかもでも、よくワンライナーを聞きますが、&lt;br &#x2F;&gt;
手軽さはおそらくRubyが一番か？)&lt;&#x2F;p&gt;
&lt;p&gt;シェル芸の場合、awkとかのプログラミング言語を使うことが多いですが、&lt;br &#x2F;&gt;
awkの代わりにRubyを使ったりするのも可能なので、&lt;br &#x2F;&gt;
一度極めるといろいろな場面で使えるのがRubyの大きなメリットと言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;714&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;724&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;785&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;800&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;979&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3 props&#x2F;emit】コンポーネント間通信</title>
        <published>2023-04-18T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/props-emit/"/>
        <id>https://reisuta.com/props-emit/</id>
        
        <content type="html" xml:base="https://reisuta.com/props-emit/">&lt;h2 id=&quot;konponentotoha&quot;&gt;コンポーネントとは？&lt;&#x2F;h2&gt;
&lt;p&gt;コンポーネントとは、そのままの意味としては、&lt;br &#x2F;&gt;
部品とか、構成要素とかといったものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsにおけるコンポーネントという概念も、&lt;br &#x2F;&gt;
大まかにはそのような意味で、&lt;br &#x2F;&gt;
より具体的に言うと、&lt;br &#x2F;&gt;
ボタンとか、ヘッダーとか、Webページの構成要素を指しています。&lt;&#x2F;p&gt;
&lt;p&gt;具体例を出します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; Aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;Aim.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; change&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (isShow.value) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Aim v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isShow&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;change&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;rounded-lg m-2 p-2 border border-gray-300 bg-gray-100&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;たとえば、このコードの場合、&lt;br &#x2F;&gt;
Aim.vueというコンポーネントをimportして、&lt;br &#x2F;&gt;
使用しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;props-emit&#x2F;Screen-Shot-2023-04-18-at-8.49.02.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;左側のテストと言う部分が、&lt;br &#x2F;&gt;
Aimコンポーネントです。&lt;&#x2F;p&gt;
&lt;p&gt;このように、&lt;strong&gt;Webページの構成要素となるものを、&lt;br &#x2F;&gt;
コンポーネントといいます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;通常、コンポーネントは.vueファイルに定義され、&lt;br &#x2F;&gt;
親（コンポーネントを使用する側)でimportをします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;なぜコンポーネントとして切り出すのかというと、&lt;br &#x2F;&gt;
再利用性を高めて、コードの保守性や見通しを良くするためです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、同じようなボタンが何度も記述されていては、&lt;br &#x2F;&gt;
冗長なので、ボタンのコンポーネントを.vueファイルに定義して、&lt;br &#x2F;&gt;
何度も使い回せるようにするという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、.vueファイルにコンポーネントを定義することを、&lt;br &#x2F;&gt;
単一ファイルコンポーネント（SFC）と言うらしいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;component-basics.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;component-basics.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;konponentojian-tong-xin&quot;&gt;コンポネント間通信&lt;&#x2F;h2&gt;
&lt;p&gt;コンポネントのメリットは、これだけではなく、&lt;br &#x2F;&gt;
それぞれが独立していて、親から子へのデータの受け渡し、&lt;br &#x2F;&gt;
通信をすることもできる点があります。&lt;&#x2F;p&gt;
&lt;p&gt;この子から親、親から子のデータの受け渡しの方法として、&lt;br &#x2F;&gt;
&lt;strong&gt;Vue.jsには、propsとemitというものがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下、この2つについて解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;props&quot;&gt;props&lt;&#x2F;h3&gt;
&lt;p&gt;propsとは、&lt;mark&gt;&lt;strong&gt;親コンポーネントから子コンポーネントにデータを&lt;br &#x2F;&gt;
渡す仕組みのことです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;props自体は、Vue.js独自の概念ではなく、&lt;br &#x2F;&gt;
Reactとかにも存在します。&lt;&#x2F;p&gt;
&lt;p&gt;具体例として、子コンポーネントとして、&lt;br &#x2F;&gt;
Child.vueを作成してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Prop A: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* propA *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Prop B: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* propB *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; props&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; defineProps&lt;&#x2F;span&gt;&lt;span&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  propA: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    type: String,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    required:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  propB: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    type: Number,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    default:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Vue3のComposition APIでは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;definePropsという関数を使ってpropsを定義します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、propAとpropBという２つのpropsが定義されています。&lt;&#x2F;p&gt;
&lt;p&gt;これを親から呼び出す場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; Aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;Aim.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; Child&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;Child.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; change&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (isShow.value) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Aim v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isShow&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Child&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;hello world&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;399&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;change&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;rounded-lg m-2 p-2 border border-gray-300 bg-gray-100&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;先程の、TheWelcom.vueに追記しました。&lt;br &#x2F;&gt;
Aimコンポーネントと同様に、Childコンポーネントもインポートしています。&lt;&#x2F;p&gt;
&lt;p&gt;その際、&lt;strong&gt;prop-aという感じで、&lt;br &#x2F;&gt;
definePropsで定義されているpropsを渡しています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この場合、hello worldという文字列をChildコンポーネントに渡しています。&lt;&#x2F;p&gt;
&lt;p&gt;変数をpropsにわたす場合は、&lt;br &#x2F;&gt;
prop-a=&quot;hello world&quot;の部分を&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Child&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    :prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;greeet&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;399&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というように、&lt;br &#x2F;&gt;
v-bindを使用すると渡すことができます。&lt;&#x2F;p&gt;
&lt;p&gt;v-bindとはなんぞや？って言う人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;two-way-data-binding&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で解説しているので、&lt;br &#x2F;&gt;
詳細はこちらを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;578&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;emit&quot;&gt;emit&lt;&#x2F;h3&gt;
&lt;p&gt;次にemitです。&lt;&#x2F;p&gt;
&lt;p&gt;propsが親から子へのデータの流れに対して、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;emitは、その反対の子から親へのデータの流れに対応します。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;!--&lt;&#x2F;span&gt;&lt;span&gt; 親&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; Child&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;Child.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello gwge&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; print&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;void =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;emit&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Child&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    :prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;greet&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    prop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;399&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @submit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;print&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;!--&lt;&#x2F;span&gt;&lt;span&gt; 子&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Prop A: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* propA *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Prop B: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* propB *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;submit&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Submit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; props&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; defineProps&lt;&#x2F;span&gt;&lt;span&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  propA: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    type: String,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    required:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  propB: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    type: Number,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    default:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; emit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; defineEmits&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;submit&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; submit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  emit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;submit&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;emitは、Vue3 Composition APIの場合、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;子の方に、defineEmitsという形で定義し、&lt;br &#x2F;&gt;
emit(&quot;submit&quot;)で親のv-onディレクティブのsubmitを探しにいき、&lt;br &#x2F;&gt;
そこのメソッドを実行し、printメソッドが走っているという流れです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;propsのときと同じく、&lt;br &#x2F;&gt;
defineEmitsなどは、基本的に子の方で定義します。&lt;&#x2F;p&gt;
&lt;p&gt;emitは、Reactなどには存在せず、&lt;br &#x2F;&gt;
Vue.js独特の機能です。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsは双方向データバインディングを特徴に持つため、&lt;br &#x2F;&gt;
このようなpropsとemitという2つのパターンがあります。&lt;&#x2F;p&gt;
&lt;p&gt;チームやPJの方針にもよりますが、&lt;br &#x2F;&gt;
無思考でpropsやemitをたくさん書いてしまうと、&lt;br &#x2F;&gt;
データの流れがカオスになるので、&lt;br &#x2F;&gt;
「こういうときはprops、こういうときはemit」という風に、&lt;br &#x2F;&gt;
大まかな方針を決めておくのがいいかなと思います。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3ライフサイクルフック】onMountedって何？関数の順序と概念</title>
        <published>2023-04-12T00:00:00+00:00</published>
        <updated>2024-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/lifecycle-hook/"/>
        <id>https://reisuta.com/lifecycle-hook/</id>
        
        <content type="html" xml:base="https://reisuta.com/lifecycle-hook/">&lt;p&gt;Vue3には、コンポーネントのライフサイクルに関わる&lt;br &#x2F;&gt;
さまざまなフックが用意されています。&lt;&#x2F;p&gt;
&lt;p&gt;これらのフックを適切に使うことで、&lt;br &#x2F;&gt;
コンポーネントの初期化、更新、削除などのタイミングで、&lt;br &#x2F;&gt;
カスタムコードを実行することができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;本記事では、Vue3のライフサイクルフックについて解説し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;onMountedフックを中心に具体的な使い方や実行順序を詳しく解説します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;動画で視聴したいという方は、&lt;br &#x2F;&gt;
下記の動画を御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;0ahsSFikaz4&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;raihusaikuruhutukutoha&quot;&gt;ライフサイクルフックとは？&lt;&#x2F;h2&gt;
&lt;p&gt;Vue3のライフサイクルフックとは、&lt;br &#x2F;&gt;
&lt;strong&gt;コンポーネントの生成、更新、削除などのタイミングで、実行されるカスタム関数のことを指します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらのフックを利用することで、&lt;br &#x2F;&gt;
コンポーネントの初期化や、各種処理を実行することができます。&lt;&#x2F;p&gt;
&lt;p&gt;ライフサイクルフックには以下のような種類があります。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;beforeCreate&lt;&#x2F;li&gt;
&lt;li&gt;created&lt;&#x2F;li&gt;
&lt;li&gt;beforeMount&lt;&#x2F;li&gt;
&lt;li&gt;mounted&lt;&#x2F;li&gt;
&lt;li&gt;beforeUpdate&lt;&#x2F;li&gt;
&lt;li&gt;updated&lt;&#x2F;li&gt;
&lt;li&gt;beforeUnmount&lt;&#x2F;li&gt;
&lt;li&gt;unmounted&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;これらのフックは、&lt;br &#x2F;&gt;
コンポーネントの生成、更新、削除などのタイミングで順次実行されます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ここにある、すべてのフックを使うのかというと&lt;br &#x2F;&gt;
そうでもなく、よく使うやつとあんまり使わないやつの差が激しい印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、本記事ではよく使うやつに焦点を当てたいと思いますが、&lt;br &#x2F;&gt;
この中でよく使うのは、&lt;strong&gt;mounted、onMountedフックです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;createdも、Vue2のOptions APIだとよく使います。&lt;br &#x2F;&gt;
(mountedよりも使用頻度は高かった)&lt;&#x2F;p&gt;
&lt;p&gt;しかし、Vue3になると、&amp;lt;script setup&amp;gt;構文のComposition APIが主流になるので、&lt;br &#x2F;&gt;
あまり使われなくなりました。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、&lt;mark&gt;上記の場合、&amp;lt;script setup&amp;gt;のタイミングが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;従来のbeforeCreateやcreatedに該当するため、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;これらの関数が不要になっているためです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、Vue3において、&lt;br &#x2F;&gt;
最も使用頻度が高いフックは、&lt;br &#x2F;&gt;
onMountedフックと言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ライフサイクルフックの詳しい流れは、&lt;br &#x2F;&gt;
下記のドキュメントが詳しいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;lifecycle.html#lifecycle-diagram&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;lifecycle.html#lifecycle-diagram&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mounted&quot;&gt;mounted&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;mark&gt;mountedフックは、コンポーネントがDOMにマウントされた後に実行されるフックです。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;このフックを利用することで、DOMにアクセスすることができます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;mountedフックは、以下のように定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;template&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;div&amp;gt;...&amp;lt;&#x2F;div&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;template&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;script&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;export default {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  mounted() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &#x2F;&#x2F; コンポーネントがマウントされた後に実行される処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;script&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;mountedフックは、&lt;br &#x2F;&gt;
Options APIで使われるフックで、&lt;br &#x2F;&gt;
ライフサイクルの順序自体は、&lt;br &#x2F;&gt;
Composition APIのonMountedと同様です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;onmounted&quot;&gt;onMounted&lt;&#x2F;h3&gt;
&lt;p&gt;onMountedフックは、Composition APIを利用したコンポーネントで、&lt;br &#x2F;&gt;
先述のようにmountedフックを使用する場合に利用されます。&lt;br &#x2F;&gt;
onMountedフックは、以下のように定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;...&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { onMounted }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onMounted&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; コンポーネントがマウントされた後に実行される処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vue3では、Composition APIを使用することが推奨されています。&lt;br &#x2F;&gt;
そのため、onMountedフックを使用することが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;onMountedフックを使用する場合は、&lt;br &#x2F;&gt;
以下のようにimport文で「onMounted」関数を読み込み、関数の中で処理を実装します。&lt;br &#x2F;&gt;
mountedの方は、いちいちimportしなくても&lt;br &#x2F;&gt;
使うことができたので、少々面倒になったかもしれないですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;...&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { onMounted }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onMounted&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;  &#x2F;&#x2F; コンポーネントがマウントされた後に実行される処理&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;onupdated&quot;&gt;onUpdated&lt;&#x2F;h3&gt;
&lt;p&gt;onUpdatedフックは、&lt;strong&gt;リアクティブ変数などによって&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;DOMが更新されたときに呼び出されるフックです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref, onUpdated }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; count&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onUpdated&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;onUpdated&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F44747;&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;count&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;count++&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* count *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;buttonを押すと、リアクティブ変数のcountが更新されて、&lt;br &#x2F;&gt;
onUpdatedが呼ばれます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;onunmounted&quot;&gt;onUnmounted&lt;&#x2F;h3&gt;
&lt;p&gt;onUnmountedは、アンマウント、&lt;br &#x2F;&gt;
すなわちコンポネントのDOMが非表示、&lt;br &#x2F;&gt;
アプリケーションの終了時などに呼び出されるフックです&lt;&#x2F;p&gt;
&lt;h3 id=&quot;beforecreatetocreated&quot;&gt;beforeCreateとcreated&lt;&#x2F;h3&gt;
&lt;p&gt;mountの前にcreatedというフックがあるため、&lt;br &#x2F;&gt;
初期化処理などは、こちらのフックでやったほうが良さそうに思えます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記でも軽く触れましたが、Composition APIの場合、&lt;br &#x2F;&gt;
これらのフックはsetupに書くのと同じタイミングにあたるため、&lt;br &#x2F;&gt;
わざわざフックにする必要性がなくなりました。&lt;br &#x2F;&gt;
そのままsetup内に書けばいいというわけです。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、Options APIでおなじみのcreatedフックなどは、&lt;br &#x2F;&gt;
composition APIでは使用する必要がなくなったというわけです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;raihusaikuruhutukunoshi-xing-shun-xu&quot;&gt;ライフサイクルフックの実行順序&lt;&#x2F;h2&gt;
&lt;p&gt;ライフサイクルフックは、以下の順序で実行されます。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;beforeCreate&lt;&#x2F;li&gt;
&lt;li&gt;created&lt;&#x2F;li&gt;
&lt;li&gt;beforeMount&lt;&#x2F;li&gt;
&lt;li&gt;mounted&lt;&#x2F;li&gt;
&lt;li&gt;beforeUpdate&lt;&#x2F;li&gt;
&lt;li&gt;updated&lt;&#x2F;li&gt;
&lt;li&gt;beforeUnmount&lt;&#x2F;li&gt;
&lt;li&gt;unmounted&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;ドキュメントはこちらです&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;lifecycle.html#lifecycle-diagram&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;lifecycle.html#lifecycle-diagram&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;試しにコードで確認してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;m-3 p-2 border&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;mt-2 p-2 rounded border border-blue-300&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;model&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; placeholder&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;test&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* text *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { onBeforeMount, onMounted, onBeforeUpdate , onUpdated, onBeforeUnmount, onUnmounted, ref}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onBeforeMount&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on before mount&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onMounted&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on mount&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onBeforeUpdate&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on before update&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, text.value)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onUpdated&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on update&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, text.value)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onBeforeUnmount&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on before unmounted&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;onUnmounted&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on unmounted&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;on created&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;lifecycle-hook&#x2F;Screen-Shot-2023-04-11-at-8.59.27-1024x429.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;console.logを確認すると、&lt;br &#x2F;&gt;
上記の順番になっていそうですね。&lt;&#x2F;p&gt;
&lt;p&gt;unmountedのフックについては、&lt;br &#x2F;&gt;
親コンポネントから、非表示&#x2F;表示を操作できるように&lt;br &#x2F;&gt;
してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; Aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;Aim.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; change&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (isShow.value) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    isShow.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;Aim v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isShow&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;change&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;rounded-lg m-2 p-2 border border-gray-300 bg-gray-100&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;isShow&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで、親コンポネントから、v-ifで表示・非表示を切り替えた際、&lt;br &#x2F;&gt;
unmountのフックが呼ばれています。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297130725_1_2.jpg&quot; alt=&quot;Vue 3　フロントエンド開発の教科書 [ WINGSプロジェクト　齊藤 新三 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Vue 3　フロントエンド開発の教科書 [ WINGSプロジェクト　齊藤 新三 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Vue%203%E3%80%80%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8%20%5B%20WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%80%80%E9%BD%8A%E8%97%A4%20%E6%96%B0%E4%B8%89%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17244444&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784815613365_1_3.jpg&quot; alt=&quot;これからはじめるVue.js 3実践入門 [ 山田 祥寛 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;これからはじめるVue.js 3実践入門 [ 山田 祥寛 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%81%93%E3%82%8C%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BVue.js%203%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%20%5B%20%E5%B1%B1%E7%94%B0%20%E7%A5%A5%E5%AF%9B%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;17036363&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000009291494.jpg&quot; alt=&quot;ASP.NET Core and Vue.js Build real-world, scalable, full-stack applications using Vue.js 3, TypeScript, .NET 5, and Azure【電子書籍】[ Devlin Basilan Duldulao ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;ASP.NET Core and Vue.js Build real-world, scalable, full-stack applications using Vue.js 3, TypeScript, .NET 5, and Azure【電子書籍】[ Devlin Basilan Duldulao ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=ASP.NET%20Core%20and%20Vue.js%20Build%20real-world%2C%20scalable%2C%20full-stack%20applications%20using%20Vue.js%203%2C%20TypeScript%2C%20.NET%205%2C%20and%20Azure%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20Devlin%20Basilan%20Duldulao%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;da2efb725db936269c74dad48a0a7fc0&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3条件分岐ループ】v-if&#x2F;v-showやv-forのkey</title>
        <published>2023-04-10T00:00:00+00:00</published>
        <updated>2023-09-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/v-for-if-show/"/>
        <id>https://reisuta.com/v-for-if-show/</id>
        
        <content type="html" xml:base="https://reisuta.com/v-for-if-show/">&lt;p&gt;本記事では、Vue3におけるv-ifやv-forの使い方、&lt;br &#x2F;&gt;
v-showとの違い、v-forのアンチパターンについて紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsでは、普通のプラグラミング言語のように、&lt;br &#x2F;&gt;
v-ifなどのような条件分岐のコードを書くことができます。&lt;&#x2F;p&gt;
&lt;p&gt;そんな条件分岐のコードとして、&lt;br &#x2F;&gt;
Vue.jsには、v-ifやv-showなどがあります。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、これらの特徴や違い、&lt;br &#x2F;&gt;
v-forについても解説していきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tiao-jian-fu-kirendaringu&quot;&gt;条件付きレンダリング&lt;&#x2F;h2&gt;
&lt;p&gt;Vue.jsにおける、&lt;br &#x2F;&gt;
ifなどの条件分岐の文は、&lt;br &#x2F;&gt;
ドキュメントだと、&lt;br &#x2F;&gt;
条件付きレンダリングとされています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;conditional.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;conditional.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下、これら条件付きレンダリングについて、&lt;br &#x2F;&gt;
触れていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-iftoha&quot;&gt;v-ifとは？&lt;&#x2F;h3&gt;
&lt;p&gt;v-ifは、条件に応じて要素を表示または非表示にするためのディレクティブです。&lt;br &#x2F;&gt;
(ディレクティブ自体の解説については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;two-way-data-binding&#x2F;#i-2&quot;&gt;こちらの記事&lt;&#x2F;a&gt;をご参考ください。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;v-ifを使用することで、動的に要素を表示&#x2F;非表示することができます。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
以下は、v-ifを使用したサンプルコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されます&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isDisplayed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のコードでは、isDisplayedというrefを使用して、p要素が表示されるかどうかを動的に制御しています。&lt;br &#x2F;&gt;
このように、v-ifを使用することで、条件に応じた要素の表示&#x2F;非表示を実現することができます。&lt;br &#x2F;&gt;
(ref(リアクティブ)についての&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ref&#x2F;&quot;&gt;参考記事はこちら&lt;&#x2F;a&gt;です)&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptなどのif文と同様に、&lt;br &#x2F;&gt;
else-ifやelseを使用することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 80&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;80以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 70&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;70以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 60&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;60以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;不明&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { computed }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isDisplayed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;random&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、else-ifとかelseを使う場合は、&lt;br &#x2F;&gt;
タグを連続で記述する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、下記のようなコードは書けません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;!--&lt;&#x2F;span&gt;&lt;span&gt; 下記は不可&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; --&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 80&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;80以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;いいね&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 70&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;70以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed &amp;gt;= 60&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;60以上&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-else&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;不明&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vue.jsは、このようにHTML側に&lt;br &#x2F;&gt;
直感的にifとかを書けるので、&lt;br &#x2F;&gt;
わかりやすいですね。&lt;&#x2F;p&gt;
&lt;p&gt;次に、v-ifと似たような条件分岐のディレクティブである、&lt;br &#x2F;&gt;
v-showについて解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-showtoha&quot;&gt;v-showとは？&lt;&#x2F;h3&gt;
&lt;p&gt;v-showも、v-ifと似たようなディレクティブで、&lt;br &#x2F;&gt;
&lt;strong&gt;条件に合致した場合に、表示するようなものです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されます&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isDisplayed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;さて、これだけ見ると、&lt;br &#x2F;&gt;
v-ifとv-showはほとんど違いがないような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;実際、この2つの違いは、&lt;br &#x2F;&gt;
あるにはありますが、ものすごく大きな差異とまでは&lt;br &#x2F;&gt;
言えないと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;v-showtov-ifhahe-gawei-uka&quot;&gt;v-showとv-ifは何が違うか？&lt;&#x2F;h4&gt;
&lt;p&gt;v-showは、条件に応じて要素を表示または非表示にするためのディレクティブです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;v-ifとの違いは、v-ifは条件に応じてDOM要素を削除するのに対し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;v-showはdisplayプロパティを制御するため、要素自体は削除されずに表示&#x2F;非表示が切り替わります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;つまり、v-showは、表示&#x2F;非表示を切り替える際に、&lt;br &#x2F;&gt;
DOM要素を再描画する必要がないため、より効率的です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されます&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されます&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-if=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed2&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されない&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;p v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;show&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;isDisplayed2&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;表示されない&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isDisplayed&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; isDisplayed2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;false&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、表示されますの部分だけ画面に表示されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;v-for-if-show&#x2F;Screen-Shot-2023-04-10-at-8.05.59.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;違いは、表示されないと記載している、&lt;br &#x2F;&gt;
pタグ部分にあって、&lt;&#x2F;p&gt;
&lt;p&gt;これをGoogle developer toolsなどで、&lt;br &#x2F;&gt;
HTML構造を確認すると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;!--v-if--&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;p style=&amp;quot;display: none;&amp;quot;&amp;gt;表示されない&amp;lt;&#x2F;p&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とv-showの場合は、&lt;br &#x2F;&gt;
レンダリングされた上で、styleで非表示にしていることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;なので、表示&#x2F;非表示の切り替えコストがかかる場合は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;v-showの方が効率的といった感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;しばしば言及される、v-ifとv-showの違い問題ですが、&lt;br &#x2F;&gt;
正直私は、この違いをクリティカルに利用した場面に出会ったことがありません。&lt;&#x2F;p&gt;
&lt;p&gt;面倒くさかったら、基本v-ifを使い、&lt;br &#x2F;&gt;
なんかv-ifだといちいち切り替えるときに重い気がするなってときに、&lt;br &#x2F;&gt;
v-showを使えば良い気がします。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;risutorendaringu&quot;&gt;リストレンダリング&lt;&#x2F;h2&gt;
&lt;p&gt;次にv-forなどのループの方に移って行きたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;上記の、条件付きレンダリングに対して、&lt;br &#x2F;&gt;
forなどの文は、Vue.jsでは、&lt;br &#x2F;&gt;
リストレンダリングと括られています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;list.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;list.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下、これらリストレンダリングについて触れていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-fortoha&quot;&gt;v-forとは？&lt;&#x2F;h3&gt;
&lt;p&gt;v-forは、配列やオブジェクトの各要素に対して、繰り返し処理を行うためのディレクティブです。&lt;br &#x2F;&gt;
以下は、v-forを使用したサンプルコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;ul&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;li v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;(item, index) in items&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; :key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;item&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* item *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;li&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;ul&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; items&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;りんご&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;バナナ&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;みかん&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のコードでは、itemsという配列の各要素を繰り返し処理し、li要素を生成しています。&lt;br &#x2F;&gt;
v-forを使用することで、配列やオブジェクトを簡単に表示することができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;構文自体は、item in itemsという風に、inの後にループさせたい変数を持ってきて、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;inの前にループ内部で使用したい変数を格納する感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;v-forの文法自体は、&lt;br &#x2F;&gt;
Pythonに似ているので、&lt;br &#x2F;&gt;
比較的わかりやすいですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;key&quot;&gt;key&lt;&#x2F;h4&gt;
&lt;p&gt;さて、ここまでは意外と素直なv-forですが、&lt;br &#x2F;&gt;
面倒くさいのが、:keyの部分です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;list.html#v-for-with-v-if&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;list.html#v-for-with-v-if&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vueの場合、v-forを使う際、&lt;br &#x2F;&gt;
こうしたkeyを指定する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;さて、これの面倒なところは、&lt;br &#x2F;&gt;
これ実は、指定しなくてもエラーにはならないです。&lt;&#x2F;p&gt;
&lt;p&gt;じゃあ、よくねって思いますよね？&lt;br &#x2F;&gt;
（私は最初そう思いました。)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;v-forでkeyを指定しないのは、明らかなアンチパターンになっており、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;公式ドキュメントでは、なんとしても守ってくださいと言われています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;style-guide&#x2F;rules-essential.html#use-detailed-prop-definitions&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;style-guide&#x2F;rules-essential.html#use-detailed-prop-definitions&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;じゃあ、そもそもこのkeyってなんなの？って感じだと思いますが、&lt;br &#x2F;&gt;
ぶっちゃけ詳細は現時点では追わなくて大丈夫です。&lt;br &#x2F;&gt;
割とVue内部に関わる話なので、最初のうちは混乱するだけになりがちです。&lt;br &#x2F;&gt;
(私がそうでした)&lt;&#x2F;p&gt;
&lt;p&gt;なので、めちゃくちゃざっくり説明すると、&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;keyは、v-forのデータ項目が変更とか更新とかされた際に、&lt;br &#x2F;&gt;
Vue側が一意な何かの値で個々の要素を識別するために必要といった感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すみません、これでもまだわかりにくいですよね。&lt;br &#x2F;&gt;
要は、keyは割と文字通りの意味で、一意な値を設定することで、&lt;br &#x2F;&gt;
要素を識別できるようにしているわけです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、keyには一意な値を設定する必要があります。&lt;br &#x2F;&gt;
（そうじゃないと、要素を識別できないですもんね）&lt;&#x2F;p&gt;
&lt;p&gt;まあ、平たく言うと、&lt;br &#x2F;&gt;
Vueのv-forのアルゴリズムが、&lt;br &#x2F;&gt;
要素の順序とかの識別をkeyがある場合とない場合で選り分けていて、&lt;br &#x2F;&gt;
その設計上基本的にはkeyが必要みたいな感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;api&#x2F;built-in-special-attributes.html#key&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;api&#x2F;built-in-special-attributes.html#key&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;たしか、keyを指定しないと、&lt;br &#x2F;&gt;
ESLintとかでも警告が出ていたはずなので、&lt;br &#x2F;&gt;
基本的には指定しましょう。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、Vue.jsのアンチパターンという意味では、&lt;br &#x2F;&gt;
&lt;strong&gt;v-ifとv-forを一緒に使うというのも存在します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これも、避けるべきスタイルの一つとして&lt;br &#x2F;&gt;
定義されているので、気をつけたいですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;style-guide&#x2F;rules-essential.html#avoid-v-if-with-v-for&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;style-guide&#x2F;rules-essential.html#avoid-v-if-with-v-for&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3】リアクティブとは？refやcomputed(算出プロパティ)</title>
        <published>2023-04-04T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/ref/"/>
        <id>https://reisuta.com/ref/</id>
        
        <content type="html" xml:base="https://reisuta.com/ref/">&lt;p&gt;本記事では、Vue.jsの重要な概念である、&lt;br &#x2F;&gt;
リアクティブについて扱います。&lt;&#x2F;p&gt;
&lt;p&gt;その中でも、refやcomputedについて、&lt;br &#x2F;&gt;
詳細に解説します。&lt;&#x2F;p&gt;
&lt;p&gt;動画でご覧になりたい方は、&lt;br &#x2F;&gt;
こちらをご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;l2PK4tBBKpA&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;riakuteibutoha&quot;&gt;リアクティブとは？&lt;&#x2F;h2&gt;
&lt;p&gt;リアクティブとは何でしょうか？&lt;br &#x2F;&gt;
私も最初、この概念がよくわかりませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;記事とかドキュメントを見ても、&lt;br &#x2F;&gt;
いまいちピンと来ませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;リアクティブとは、簡単に言うと、&lt;br &#x2F;&gt;
&lt;strong&gt;変数の値が変化すると、view側もそれに応じて変わってくれる流れみたいないものです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、双方向データバインディングを想起するとイメージしやすいと思いますが、&lt;br &#x2F;&gt;
JS → HTML、HTML → JSのように、変更に応じて、&lt;br &#x2F;&gt;
一方に反映させていくような感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;大抵の場合、変数はJS側で定義し、&lt;br &#x2F;&gt;
view側はHTMLになるので、&lt;br &#x2F;&gt;
本質的には、双方向データバインディングの議論と&lt;br &#x2F;&gt;
あまり変わらないかなと思います。&lt;br &#x2F;&gt;
(双方向データバインディングについては、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;two-way-data-binding&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;をご参考ください。)&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、下記あたりがそれに該当しますかね。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ref()&lt;&#x2F;li&gt;
&lt;li&gt;reactive()&lt;&#x2F;li&gt;
&lt;li&gt;computed()&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;あとは、JavaScriptプロキシとかも該当するのかもしれません&lt;br &#x2F;&gt;
（混乱するだけだから、特に意識しなくてもいいような気もしますが...)&lt;&#x2F;p&gt;
&lt;p&gt;リアクティブの厳密な定義としては、&lt;br &#x2F;&gt;
変更がview側に検知されて、view側を気にしなくていいメリットがあるみたいな感じだと思いますが、&lt;br &#x2F;&gt;
Vue.jsにおけるリアクティブといったら、ほぼほぼ、&lt;br &#x2F;&gt;
**ref()**のことを言っていると思っても大丈夫だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;同じ種類として、reactive()というのもありますが、&lt;br &#x2F;&gt;
ぶっちゃけ使う頻度は、ref()よりは下がると思います。&lt;&#x2F;p&gt;
&lt;p&gt;computed()も、リアクティブといえば、&lt;br &#x2F;&gt;
リアクティブなのですが、&lt;br &#x2F;&gt;
それよりは算出プロパティという、&lt;br &#x2F;&gt;
関数としての特徴のほうが印象的な気がします。&lt;br &#x2F;&gt;
（算出プロパティはリアクティブな依存関係にもとづきキャッシュされるので、&lt;br &#x2F;&gt;
そういった意味では、リアクティブの関数verみたいな感じですが）&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;computed.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;computed.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ref&quot;&gt;ref&lt;&#x2F;h2&gt;
&lt;p&gt;さて、それでは主役のrefとは一体何でしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;まず、リアクティブな変数を作成するには、&lt;br &#x2F;&gt;
ref以外にも、reactive()というのもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;reactivity-fundamentals.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;reactivity-fundamentals.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、reactive()は、オブジェクト型にしか使えないため、&lt;br &#x2F;&gt;
文字列とか数値みたいなプリミティブ型には使えないという制限があります。&lt;&#x2F;p&gt;
&lt;p&gt;プリミティブ型って何？という方は、&lt;br &#x2F;&gt;
下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;23&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;その制限に対処したのが、&lt;br &#x2F;&gt;
ref()という感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、refでリアクティブな変数を作成し、&lt;br &#x2F;&gt;
プリミティブ型にも対処できるという感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ref&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;inputRef&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;handleClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ボタン&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; inputRef&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;HTMLInputElement&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; handleClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  if&lt;&#x2F;span&gt;&lt;span&gt; (inputRef.value) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(inputRef.value.value);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じのコードがあるとすると、&lt;br &#x2F;&gt;
inputRefという変数がリアクティブになっているので、&lt;br &#x2F;&gt;
inputタグの中身が変われば、&lt;br &#x2F;&gt;
変数の中身も変わっていき、ボタンをクリックすると、&lt;br &#x2F;&gt;
その変わった変数の中身を出力しているといった感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;基本的には、こんな感じで、&lt;br &#x2F;&gt;
HTMLのフォームとかの値をTypeScriptの変数の方にも反映させたいときに、&lt;br &#x2F;&gt;
refとか、v-modelを使用することになるでしょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;riakuteibuziyanaitodounaru&quot;&gt;リアクティブじゃないとどうなる？&lt;&#x2F;h3&gt;
&lt;p&gt;リアクティブじゃないコードのサンプルを紹介します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;商品価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* price *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;消費税込み価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* priceIncludingTax *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;handleClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ボタン&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref, computed }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; priceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; handleClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(price)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ref&#x2F;Screen-Shot-2023-04-01-at-13.34.40-1024x443.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この場合、Typescript側の変数priceの中身と、&lt;br &#x2F;&gt;
html(view側)で表示されている値が食い違っています。&lt;&#x2F;p&gt;
&lt;p&gt;画面に描写されているのは、&lt;br &#x2F;&gt;
初期値の、1000と1100ですが、&lt;br &#x2F;&gt;
console.logでは、ちゃんと100づつ加算されている、&lt;br &#x2F;&gt;
変数priceが出力されています。&lt;&#x2F;p&gt;
&lt;p&gt;リアクティブな場合と比べてみます。&lt;br &#x2F;&gt;
※変数名が手抜きなのは許してください&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;商品価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* price *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;ref商品価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* refprice *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;消費税込み価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* priceIncludingTax *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;ref消費税込み価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* refpriceIncludingTax *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;handleClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;ボタン&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;refClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;リアクティブボタン&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref, computed }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; refprice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; priceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; refpriceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; handleClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(price)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; refClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、リアクティブの方は、&lt;br &#x2F;&gt;
加算されるに従って、画面も反映されていますね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;computed-suan-chu-puropatei&quot;&gt;computed(算出プロパティ)&lt;&#x2F;h2&gt;
&lt;p&gt;上記で少し登場しましたが、&lt;br &#x2F;&gt;
computedは、さっきのコードで言うと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref, computed }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; priceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(price&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; refpriceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここの部分です。&lt;br &#x2F;&gt;
Vue3 Composition APIの場合、importして使用します。&lt;&#x2F;p&gt;
&lt;p&gt;構文的には、computed()の中に、関数処理を書いていく感じです。&lt;br &#x2F;&gt;
基本的には、複雑なロジックを関数として、&lt;br &#x2F;&gt;
htmlの方に表示するために使われるので、&lt;br &#x2F;&gt;
{{&#x2F;**&#x2F;}}構文の中に複雑なロジックを書かないための改善策みたいな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;computed()は、普通の関数としても実装はできますが、&lt;br &#x2F;&gt;
少し違いがあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;ref商品価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* refprice *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;ref消費税込み価格: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* refpriceIncludingTax *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}円&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;普通の関数: {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; func1&lt;&#x2F;span&gt;&lt;span&gt;() }}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;refClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;リアクティブボタン&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;refClick2&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;リアクティブボタン22&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* omake *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref, computed }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; refprice&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; omake&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; func1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;普通の関数の処理&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; refpriceIncludingTax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; computed&lt;&#x2F;span&gt;&lt;span&gt;(()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;computedの処理&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; taxRate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0.1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; Math.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;round&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; taxRate));&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;});&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; refClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  refprice.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(refprice.value)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; refClick2&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  omake.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;mark&gt;computedは、中のリアクティブな変数の値が更新された際にだけ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;呼ばれるのに対し、普通の関数は、再描画が起きると毎回呼ばれます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;つまり、computedのほうが、リアクティブなキャッシュを保持しているといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;上記のコードの場合、&lt;br &#x2F;&gt;
リアクティブボタンを押すと、&lt;br &#x2F;&gt;
computedが感知している、リアクティブなrefprice関数が書き換わるので、&lt;br &#x2F;&gt;
処理が呼ばれますが、自身が感知していない、omake変数がリアクティブ22ボタンで書き換わっても、&lt;br &#x2F;&gt;
computedの方は呼ばれないといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、正直この違いをクリティカルに利用したいユースケースは、&lt;br &#x2F;&gt;
そんなにない気がしますが...笑&lt;&#x2F;p&gt;
&lt;p&gt;computedと普通の関数の違いとしては、&lt;br &#x2F;&gt;
このような感じです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3&#x2F;v-model】双方向データバインディングとは？</title>
        <published>2023-04-04T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/two-way-data-binding/"/>
        <id>https://reisuta.com/two-way-data-binding/</id>
        
        <content type="html" xml:base="https://reisuta.com/two-way-data-binding/">&lt;p&gt;Vue.jsの概念に、&lt;br &#x2F;&gt;
双方向データバインディングというものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、単方向データバインディングに対するものです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;本記事では、双方向データバインディングの解説を通して、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;単方向データバインディングとの違いに触れつつ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;v-model, v-on, v-bindの関係性や違いについても解説します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;文字ではなく、動画で学習したい方は、&lt;br &#x2F;&gt;
下記の動画御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;kncfeG6f-8E&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;shuang-fang-xiang-detabaindeingutodan-fang-xiang-detabaindeingu&quot;&gt;双方向データバインディングと単方向データバインディング&lt;&#x2F;h2&gt;
&lt;p&gt;そもそも、データバインディングとは、何かっていうと、&lt;br &#x2F;&gt;
これは、簡単に言うと、&lt;strong&gt;JavaScriptのデータと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;表示されているHTMLのデータとを合わせる仕組みのことです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;バックエンドとかだと、&lt;br &#x2F;&gt;
あまりHTMLと合わせるみたいなシチュエーションがないので、&lt;br &#x2F;&gt;
どちらかというと、フロントエンド技術の用語のような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;さて、そんなデータバインディングですが、&lt;br &#x2F;&gt;
バインディングされていないと、&lt;br &#x2F;&gt;
Javascriptのデータをいくら内部で書き換えても、&lt;br &#x2F;&gt;
画面の表示（HTML）が変わらないので、&lt;br &#x2F;&gt;
データが変わっていることに気づけません。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、&lt;br &#x2F;&gt;
Amazonのサイトとかで、&lt;br &#x2F;&gt;
内部のJavaScriptで、商品の価格を1000円引きしているのに、&lt;br &#x2F;&gt;
データバインディングされていないので、画面上では、&lt;br &#x2F;&gt;
割引されていないように見えるような感じです。&lt;br &#x2F;&gt;
(実際のapi処理では、JavaScriptのデータをバックエンドにわたすので、&lt;br &#x2F;&gt;
仮に決済処理を行えば、割引価格になっているはずです）&lt;&#x2F;p&gt;
&lt;p&gt;そのため、画面を操るフロントエンドでは、&lt;br &#x2F;&gt;
必須の技術なのですが、&lt;br &#x2F;&gt;
こうしたバインディングにも、&lt;br &#x2F;&gt;
&lt;strong&gt;単方向と、双方向という種類があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらは、文字通りベクトルの違いです&lt;&#x2F;p&gt;
&lt;p&gt;フロントエンドのデータバインディングの場合、&lt;br &#x2F;&gt;
大まかな流れとして&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;・JS → HTML&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;・HTML → JS&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;二種類があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;双方向データバインディングとは、&lt;br &#x2F;&gt;
この両方の流れをサポートしているバインディングのことです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、&lt;strong&gt;単方向データバインディング、&lt;br &#x2F;&gt;
上記のどちらか一方だけをサポートしているものです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下は、双方向データバインディングのサンプルコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;label for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Name:&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;model&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello, {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* name *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;!&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、&amp;lt;input&amp;gt;タグの中身になにか入れると、&lt;br &#x2F;&gt;
&amp;lt;p&amp;gt;タグの中身も同じものが表示されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;two-way-data-binding&#x2F;Screen-Shot-2023-04-04-at-8.39.09.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これを実現しているのは、&lt;br &#x2F;&gt;
v-modelというディレクティブなのですが、&lt;br &#x2F;&gt;
(ディレクティブについては後で説明します)&lt;br &#x2F;&gt;
流れとしては、下記のような感じです。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;lt;input&amp;gt;タグ(HTML) → name変数(JS)&lt;&#x2F;li&gt;
&lt;li&gt;name変数(JS) → &amp;lt;p&amp;gt;タグ(HTML)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;このようにして、&lt;br &#x2F;&gt;
双方向にデータがバインディングされています。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、データが一周しているような感じでしょうか。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;deirekuteibutoha&quot;&gt;ディレクティブとは？&lt;&#x2F;h2&gt;
&lt;p&gt;さて次に、ディレクティブとはなんでしょう？&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;strong&gt;HTMLで記述する、&lt;br &#x2F;&gt;
v-から始まる属性のことです&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;ビルトインのディレクティブについては、&lt;br &#x2F;&gt;
下記に記載があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;api&#x2F;built-in-directives.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;api&#x2F;built-in-directives.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、以下のようなものがあります。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;v-bind&lt;&#x2F;td&gt;&lt;td&gt;バインディング機能&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;v-on&lt;&#x2F;td&gt;&lt;td&gt;イベント処理&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;v-model&lt;&#x2F;td&gt;&lt;td&gt;双方向データバインディング&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;v-html&lt;&#x2F;td&gt;&lt;td&gt;htmlを表示する&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;v-if&lt;&#x2F;td&gt;&lt;td&gt;if文&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;v-for&lt;&#x2F;td&gt;&lt;td&gt;for文&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;他にも、v-onceとかv-preみたいなディレクティブもありますが、&lt;br &#x2F;&gt;
使用頻度はあまり高くないので割愛します。&lt;br &#x2F;&gt;
上記のビルトインディレクティブの一覧ドキュメントを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;さて、この中で圧倒的によく使うのは、&lt;br &#x2F;&gt;
&lt;strong&gt;v-bind、v-on、v-modelの3つで、&lt;br &#x2F;&gt;
特にv-modelはよく使います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下、順番に解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-bind&quot;&gt;v-bind&lt;&#x2F;h3&gt;
&lt;p&gt;先程、v-modelは双方向データバインディングだと説明しましたが、&lt;br &#x2F;&gt;
v-modelの機能は、実はv-bindとv-onの複合で実現できます。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、v-bind単体だと、単方向データバインディングにあたるわけです。&lt;br &#x2F;&gt;
それも方向的には、&lt;&#x2F;p&gt;
&lt;p&gt;JS → HTMLの方向です。&lt;br &#x2F;&gt;
（v-onはこれの逆で、これらの複合で双方向データバインディングになります）&lt;&#x2F;p&gt;
&lt;p&gt;サンプルコードを紹介します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;a :href&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;linkUrl&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* linkText *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;button :class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;buttonClass&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; @click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;onClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* buttonText *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;button&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; linkUrl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;https:&#x2F;&#x2F;example.com&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; linkText&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Example Link&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; buttonClass&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;primary&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; buttonText&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Click me!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; onClick&lt;&#x2F;span&gt;&lt;span&gt;() {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  buttonText.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Clicked!&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;:classとか:hrefというのが、&lt;br &#x2F;&gt;
v-bindの省略形の記法で、&lt;br &#x2F;&gt;
v-bind:classとかと同じ意味です。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、JS側で指定した、&lt;br &#x2F;&gt;
linkUrlとかbuttonClass変数の内容が、&lt;br &#x2F;&gt;
href属性やclass属性に適応されます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-on&quot;&gt;v-on&lt;&#x2F;h3&gt;
&lt;p&gt;v-onは、v-bindの逆の方向で、&lt;&#x2F;p&gt;
&lt;p&gt;HTML → JS&lt;&#x2F;p&gt;
&lt;p&gt;の流れです。（正確にはHTMLというよりDOMだが&lt;br &#x2F;&gt;
templateタグからscriptタグという流れの表現的には、&lt;br &#x2F;&gt;
HTMLと言っても良い気がしたのでHTMLとしています）&lt;&#x2F;p&gt;
&lt;p&gt;サンプルコードを紹介します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;h1&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;タグ&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;h1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; @input&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;onInput&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; :value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;message&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;{{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* message *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; message&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; onInput&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Event&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;HTMLInputElement&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  message.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; target.value;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;@inputというのは、&lt;br &#x2F;&gt;
v-on:inputと同じ意味の省略形です。&lt;&#x2F;p&gt;
&lt;p&gt;inputイベントは、何かが入力されることをトリガーにします。&lt;br &#x2F;&gt;
つまり、上記のコードは、inputタグ(HTML）に何かが入力されたら、&lt;br &#x2F;&gt;
JS側のonInputメソッドが呼ばれ、message変数が書き換わるという、&lt;br &#x2F;&gt;
バインディングをしています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;v-model&quot;&gt;v-model&lt;&#x2F;h3&gt;
&lt;p&gt;v-modelは、すでに出てきたv-bindとv-onの融合系みたいな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、先程紹介した下記のコードですが、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;label for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Name:&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;model&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello, {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* name *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;!&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;下記のように書き換えられます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;label for&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Name:&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;input id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; :value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;name&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; @input&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;updateName&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;p&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;Hello, {{&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;* name *&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;}}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;!&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; updateName&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;event&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Event&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.target&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;HTMLInputElement&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  name.value&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; target.value;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;記述が冗長になりましたが、同じことをしています。&lt;br &#x2F;&gt;
イメージとしては、v-bind + v-on = v-modelみたいな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;双方向データバインディングをしたい場合は、&lt;br &#x2F;&gt;
基本的にv-modelを使うことが多いでしょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dan-fang-xiang-detabaindeingutoshuang-fang-xiang-detabaindeingudotutigaii&quot;&gt;単方向データバインディングと双方向データバインディングどっちがいい？&lt;&#x2F;h2&gt;
&lt;p&gt;これは、正直好みやケース・バイ・ケースの部分もあるのですが、&lt;br &#x2F;&gt;
最近の主流は、&lt;strong&gt;やはり単方向データバインディング&lt;&#x2F;strong&gt;でしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、双方向データバインディングの場合、&lt;br &#x2F;&gt;
小規模のアプリとか、機能が単純なものであれば、&lt;br &#x2F;&gt;
便利な代物ですが、複雑化かつ大規模になると、&lt;br &#x2F;&gt;
データの流れが混戦しがちで、追うのも容易ではなくなってきます。&lt;&#x2F;p&gt;
&lt;p&gt;値があっちこっちにいったりきたりで、&lt;br &#x2F;&gt;
結局どこ行った？状態になりがちなので、&lt;br &#x2F;&gt;
双方向データバインディングは、一般的には、&lt;br &#x2F;&gt;
メリットよりもデメリットのほうに注目されがちです。&lt;&#x2F;p&gt;
&lt;p&gt;また、意図せずデータが書き換わってしまうということも、&lt;br &#x2F;&gt;
双方向データバインディングの場合、&lt;br &#x2F;&gt;
単方向よりも起きやすい気がしています。&lt;&#x2F;p&gt;
&lt;p&gt;これも、あっちこっちにいってしまい、&lt;br &#x2F;&gt;
追うことができなくなってしまうのが原因かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;このあたりは、保守性が高いコードや設計、厳密なコーディングスタイルなどによって、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ある程度は解消できるものでもある気がするので、やはり正直チームやプロジェクトによると思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Reactは、基本的に単方向データバインディングを採用しており、&lt;br &#x2F;&gt;
Reactと比較したVueのデメリットの一つとして、しばしば双方向データバインディングを&lt;br &#x2F;&gt;
挙げられることも多いので、賛否両論の機能であることは間違いなさそうです。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsにおいても、v-modelではなく、&lt;br &#x2F;&gt;
v-bindやv-onだけを使えばいいのではないかという意見もありますが、&lt;br &#x2F;&gt;
正直それだと、Vue.jsを採用するメリットが無い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;また、v-modelを使わないとなると、&lt;br &#x2F;&gt;
かなり記述が冗長になることが予想されます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、双方向データバインディングのデメリットが気になるのであれば、&lt;br &#x2F;&gt;
Vue.jsの採用には慎重になったほうがいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;v-modelだけでなく、Vue.jsには、propsに加えemitというものもあり、&lt;br &#x2F;&gt;
ここも双方向データバインディングのような動きをします。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、逆にこのような双方向データバインディングのほうが、&lt;br &#x2F;&gt;
記法をすっきりさせたり、柔軟な記述ができるという、&lt;br &#x2F;&gt;
メリットの部分を重視すれば、Vue.jsを採用するのも有りだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、結局は好き嫌いですね(笑)&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Vue.jsのpropsとemitについては、&lt;br &#x2F;&gt;
下記の記事で紹介しているので、よければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;638&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Vue.jsとChatGPT APIでずんだもんに回答を喋ってもらう</title>
        <published>2023-03-31T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/chatgpt/"/>
        <id>https://reisuta.com/chatgpt/</id>
        
        <content type="html" xml:base="https://reisuta.com/chatgpt/">&lt;h2 id=&quot;chatgpttoha&quot;&gt;ChatGPTとは？&lt;&#x2F;h2&gt;
&lt;p&gt;ChatGPTとは何でしょうか？&lt;br &#x2F;&gt;
本人に聞いてみました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chatgpt&#x2F;Screen-Shot-2023-03-30-at-10.57.41.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;おお、模範解答（？）ですね。&lt;&#x2F;p&gt;
&lt;p&gt;このように、ChatGPTとは、&lt;br &#x2F;&gt;
AIの一種で、人間が質問したものに対して、&lt;br &#x2F;&gt;
応答してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;その精度や、回答が人間味があることで&lt;br &#x2F;&gt;
話題になりましたね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;chat.openai.com&#x2F;chat&quot;&gt;https:&#x2F;&#x2F;chat.openai.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;実際に色々試してみると、&lt;br &#x2F;&gt;
面白いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;「夏目漱石風に好きな人に告白してみて」とか、&lt;br &#x2F;&gt;
「東京23区で一番勝ち組なのはどこ？」みたいな&lt;br &#x2F;&gt;
アホみたいな質問にも回答してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;「エッセイを作成して」とか、&lt;br &#x2F;&gt;
しりとりの相手もしてくれます。&lt;&#x2F;p&gt;
&lt;p&gt;すごいですね笑&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vue-jskarachatgpt-apiwokou-itehua-sikaketahui-da-nei-rong-wozundamonnidie-tutemorau&quot;&gt;Vue.jsからChatGPT APIを叩いて話しかけた回答内容をずんだもんに喋ってもらう&lt;&#x2F;h2&gt;
&lt;p&gt;※下記のコードは、Vue.jsの概要で実装したコードをもとに実装しているので、&lt;br &#x2F;&gt;
まずは、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vue3-init&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;でVue.jsのセットアップを済ませてからだと、&lt;br &#x2F;&gt;
同じようにハンズオンできます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vue3-init&#x2F;&quot;&gt;【Vue3&#x2F;Docker環境構築】Vue.js概要と起動の仕組み&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;まずは、Vue.jsのルーティングに、&lt;br &#x2F;&gt;
ChatGPTにアクセスするページを追加します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      path:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;&#x2F;chat&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;chat&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      component: ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;..&#x2F;components&#x2F;Chat.vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;axiosをインストールします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose exec front yarn add axios&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;肝心のChat.vueのファイルの、&lt;br &#x2F;&gt;
コードの全体像は下記のようになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;row&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;mx-auto&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          max&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;width&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;344&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text-overline mb-1&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            入力したものをずんだもんに話してもらう&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;            &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;field v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;model&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;val&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;v&lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;field&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;on:click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;buttonClicked&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            送信&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;audio class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;audio&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;audio&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;mx-auto&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          max&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;width&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;344&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;text-overline mb-1&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            入力したものをChatGPTに飛ばす&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;            &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;field v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;model&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;chatgpt&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;v&lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;field&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;on:click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;chatGptClick&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ChatGPTへ送信&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;audio class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;audio&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;audio&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;4&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;mx-auto&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          max&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;width&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;344&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ずんだもんに話しかける&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;on:click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;start&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            開始&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn variant&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;outlined&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;on:click&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;end&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            終了&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;          &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;btn&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;actions&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;card&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;audio class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;audio&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;audio&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;row&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;row&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col cols&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;12&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;output&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;col&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;row&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { ref }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; axios&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;axios&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; buttonClicked&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = async&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(val.value);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; chatGptClick&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = async&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; responseText&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; requestChatAPI&lt;&#x2F;span&gt;&lt;span&gt;(chatgpt.value);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(responseText)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; output&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;querySelector&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;.output&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  output.textContent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; responseText;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;initial&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; chatgpt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; ref&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;chatGPT initial&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; audio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;querySelector&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;.audio&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  audio.src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getAudioURL&lt;&#x2F;span&gt;&lt;span&gt;(text);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  audio.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;play&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getAudioURL&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; query&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getQuery&lt;&#x2F;span&gt;&lt;span&gt;(text);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;quot;http:&#x2F;&#x2F;localhost:50021&#x2F;synthesis?speaker=1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    query,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    { responseType:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;blob&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; URL.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;createObjectURL&lt;&#x2F;span&gt;&lt;span&gt;(response.data);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getQuery&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    `http:&#x2F;&#x2F;localhost:50021&#x2F;audio_query?speaker=1&amp;amp;text=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; response.data;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; api_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;各自のキー&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; requestChatAPI&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;quot;Content-Type&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;application&#x2F;json&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Authorization:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; `Bearer &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;api_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; messages&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    role:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;user&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    content: text,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; payload&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  model:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;gpt-3.5-turbo&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  max_tokens:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 128&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  messages: messages,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;quot;https:&#x2F;&#x2F;api.openai.com&#x2F;v1&#x2F;chat&#x2F;completions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  payload,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    headers: headers,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;ChatGPT送信&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; response.data.choices[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].message.content;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; recognition&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; webkitSpeechRecognition&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; language&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;ja&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; language;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.interimResults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.continuous&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.onresult&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; handleResult;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; handleResult&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;event&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  let&lt;&#x2F;span&gt;&lt;span&gt; finalTranscript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.resultIndex; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; event.results.length; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; transcript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.results[i][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].transcript;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(transcript);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (event.results[i].isFinal) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      finalTranscript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; transcript;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; responseText&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; requestChatAPI&lt;&#x2F;span&gt;&lt;span&gt;(finalTranscript);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(responseText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; output&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;querySelector&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;.output&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      output.textContent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; responseText;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; start&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  recognition.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;start&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; stop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; ()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  recognition.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;stop&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;chatgpt&#x2F;Screen-Shot-2023-03-31-at-19.02.08-1024x628.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな感じになります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;platform.openai.com&#x2F;account&#x2F;org-settings&quot;&gt;https:&#x2F;&#x2F;platform.openai.com&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のコードは、音声認識をして、&lt;br &#x2F;&gt;
その内容をChatGPTに渡して、&lt;br &#x2F;&gt;
回答結果をずんだもんに話してもらうという流れになっています。&lt;&#x2F;p&gt;
&lt;p&gt;一つずつ解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yin-sheng-ren-shi-wositeirubu-fen&quot;&gt;音声認識をしている部分&lt;&#x2F;h3&gt;
&lt;p&gt;まず、音声認識の部分ですが、&lt;br &#x2F;&gt;
下記のコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; recognition&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; webkitSpeechRecognition&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; language&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;ja&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; language;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.interimResults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.continuous&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;recognition.onresult&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; handleResult;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; handleResult&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;event&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  let&lt;&#x2F;span&gt;&lt;span&gt; finalTranscript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  for&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.resultIndex; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; event.results.length; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;++&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; transcript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; event.results[i][&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].transcript;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(transcript);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; (event.results[i].isFinal) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      finalTranscript&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; transcript;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; responseText&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; requestChatAPI&lt;&#x2F;span&gt;&lt;span&gt;(finalTranscript);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(responseText);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;      const&lt;&#x2F;span&gt;&lt;span&gt; output&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;querySelector&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;.output&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      output.textContent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; responseText;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;このコードは、Web Speech API を使用して音声認識を行い、認識されたテキストを使用してチャットボットとの対話を実現するためのものです。&lt;&#x2F;p&gt;
&lt;p&gt;最初に webkitSpeechRecognition() を使用して、新しい SpeechRecognition オブジェクトを作成します。&lt;&#x2F;p&gt;
&lt;p&gt;language 変数を定義し、認識される言語を指定します。この場合は、&quot;ja&quot; (日本語) が指定されています。&lt;&#x2F;p&gt;
&lt;p&gt;recognition.lang を使用して、認識される言語を設定します。&lt;&#x2F;p&gt;
&lt;p&gt;recognition.interimResults が true に設定されており、認識中に中間結果を取得することができます。&lt;&#x2F;p&gt;
&lt;p&gt;recognition.continuous が true に設定されており、ユーザーが話し続けている間に音声認識が継続します。&lt;&#x2F;p&gt;
&lt;p&gt;recognition.onresult には、認識結果が利用可能になったときに呼び出されるコールバック関数 handleResult が設定されています。&lt;&#x2F;p&gt;
&lt;p&gt;handleResult 関数は、event オブジェクトを引数に受け取り、認識されたテキストを使用してチャットボットとの対話を実現します。&lt;&#x2F;p&gt;
&lt;p&gt;音声認識の結果は event.results 配列に格納されており、for ループを使用してその中から認識されたテキストを取得しています。&lt;&#x2F;p&gt;
&lt;p&gt;event.results[i].isFinal が true の場合、認識が終了したことを示し、finalTranscript 変数に認識されたテキストが追加されます。&lt;&#x2F;p&gt;
&lt;p&gt;requestChatAPI() 関数を使用して、finalTranscript のテキストをチャットボット API に送信し、応答を受信します。&lt;&#x2F;p&gt;
&lt;p&gt;createAudio() 関数を使用して、チャットボットの応答を音声合成し、ユーザーに再生します。&lt;&#x2F;p&gt;
&lt;p&gt;最後に、output 変数を使用して、チャットボットの応答を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPTさん&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;せっかくなので、ChatGPTに処理の内容について説明してもらいました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zundamontolian-xi-siteirubu-fen&quot;&gt;ずんだもんと連携している部分&lt;&#x2F;h3&gt;
&lt;p&gt;ずんだもんは、VOICEVOXというアプリで使用できるキャラクターで、&lt;br &#x2F;&gt;
可愛い声が特徴的です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;voicevox.hiroshiba.jp&#x2F;&quot;&gt;https:&#x2F;&#x2F;voicevox.hiroshiba.jp&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;VOICEVOX&#x2F;voicevox_engine&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;VOICEVOX&#x2F;voicevox_engine&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;アプリをインストールして、&lt;br &#x2F;&gt;
起動しておけば、localhost:50021にリッスンして、&lt;br &#x2F;&gt;
リクエストを送れるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;該当コードは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createAudio&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; audio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; document.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;querySelector&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;.audio&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  audio.src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getAudioURL&lt;&#x2F;span&gt;&lt;span&gt;(text);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  audio.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;play&lt;&#x2F;span&gt;&lt;span&gt;();&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getAudioURL&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; query&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getQuery&lt;&#x2F;span&gt;&lt;span&gt;(text);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;quot;http:&#x2F;&#x2F;localhost:50021&#x2F;synthesis?speaker=1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    query,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    { responseType:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;blob&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; URL.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;createObjectURL&lt;&#x2F;span&gt;&lt;span&gt;(response.data);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; getQuery&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;  const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    `http:&#x2F;&#x2F;localhost:50021&#x2F;audio_query?speaker=1&amp;amp;text=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;text&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  );&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span&gt; response.data;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;このコードは、与えられたテキストを使用して音声合成して再生する関数 createAudio と、テキストを使用して音声データの URL を取得する関数 getAudioURL 、テキストを使用してチャットボット API に送信するためのクエリを作成する関数 getQuery から構成されています。&lt;&#x2F;p&gt;
&lt;p&gt;createAudio 関数は、与えられたテキストを使用して音声合成して再生する関数です。まず、 document.querySelector を使用して、 HTML 上の audio タグを取得します。次に、 getAudioURL 関数を使用して、与えられたテキストを使用して音声データの URL を取得します。最後に、 audio.play() を呼び出して音声を再生します。&lt;&#x2F;p&gt;
&lt;p&gt;getAudioURL 関数は、与えられたテキストを使用して音声データの URL を取得する関数です。まず、 getQuery 関数を使用して、与えられたテキストを使用してチャットボット API に送信するためのクエリを取得します。次に、axios.post を使用して、API に対してクエリを送信し、Blob データを取得します。最後に、URL.createObjectURL を使用して Blob データから URL を作成し、URL を返します。&lt;&#x2F;p&gt;
&lt;p&gt;getQuery 関数は、与えられたテキストを使用して、チャットボット API に送信するためのクエリを作成する関数です。axios.post を使用して、API に対してテキストを送信し、応答を受信します。そして、API から受け取った応答データを返します。&lt;&#x2F;p&gt;
&lt;p&gt;このコードは、非同期処理を使用して、API からの応答を待ってから次の処理を実行することができます。また、 URL.createObjectURL を使用して Blob データから URL を作成することで、オーディオ再生のための URL を直接取得することができます。&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPTさん&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;基本正しいのですが、&lt;br &#x2F;&gt;
getQuery関数は、VOICEBOXのAPIに送信するためのクエリーです&lt;br &#x2F;&gt;
（ChatGPTさん、チャットボットAPIとは何者でしょうか？)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chatgpt-apiwokou-iteirubu-fen&quot;&gt;ChatGPT APIを叩いている部分&lt;&#x2F;h3&gt;
&lt;p&gt;さて、いよいよChatGPT APIを叩いている部分ですが、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;async&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; requestChatAPI&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;text&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; headers&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;quot;Content-Type&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;application&#x2F;json&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  Authorization:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; `Bearer &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;api_key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; messages&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    role:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;user&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    content: text,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; payload&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  model:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;gpt-3.5-turbo&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  max_tokens:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 128&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  messages: messages,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;};&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; response&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = await&lt;&#x2F;span&gt;&lt;span&gt; axios.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;post&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;quot;https:&#x2F;&#x2F;api.openai.com&#x2F;v1&#x2F;chat&#x2F;completions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  payload,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    headers: headers,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;ChatGPT送信&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;return&lt;&#x2F;span&gt;&lt;span&gt; response.data.choices[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;].message.content;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;このコードは、OpenAIのChat APIを使用して、テキストを受け取り、AIが生成したテキストを返すための関数です。&lt;&#x2F;p&gt;
&lt;p&gt;まず、Authorizationヘッダーを設定して、APIキーを含めます。次に、リクエストの本文として、ユーザーが入力したテキストを含むメッセージオブジェクトを作成します。そして、APIの使用モデル、最大トークン数、そしてメッセージオブジェクトを含むペイロードを定義します。&lt;&#x2F;p&gt;
&lt;p&gt;最後に、Axiosを使用して、OpenAIのAPIエンドポイントにPOSTリクエストを送信し、レスポンスを受け取ります。レスポンスには、AIによって生成されたテキストが含まれています。また、送信が成功したことを示すために、&quot;ChatGPT送信&quot;という文字列をコンソールに出力します。最後に、AIが生成したテキストを返します。&lt;&#x2F;p&gt;
&lt;p&gt;ChatGPTさん&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;ありがとうございます！ChatGPTさん！&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vue3&#x2F;Docker環境構築】Vue.js概要と起動の仕組み</title>
        <published>2023-03-27T00:00:00+00:00</published>
        <updated>2023-09-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/vue3-init/"/>
        <id>https://reisuta.com/vue3-init/</id>
        
        <content type="html" xml:base="https://reisuta.com/vue3-init/">&lt;p&gt;Vue3がリリースされ、&lt;br &#x2F;&gt;
Vue.jsは大きく変わりました。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、Vue.jsの中でも、&lt;br &#x2F;&gt;
この大きく変化したVu3に焦点を当てて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;環境構築として、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Dockerを使い、TypeScriptと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Vue.js界隈では有名な、UIフレームワークの、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Vuetifyも導入します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の環境構築に加え、Componentなどといった、&lt;br &#x2F;&gt;
フロントエンドの基本用語の解説、&lt;&#x2F;p&gt;
&lt;p&gt;テンプレート構文などのVue.jsの文法、&lt;br &#x2F;&gt;
Vue.jsの起動の仕組みについてまで解説します。&lt;&#x2F;p&gt;
&lt;p&gt;文字ではなく、動画で学習したい方は、&lt;br &#x2F;&gt;
下記を御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;1smtU3CbP34&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;また、Vue3全般について、&lt;br &#x2F;&gt;
フル動画もございますので、&lt;br &#x2F;&gt;
動画一本でVue3をマスターしたい方は、&lt;br &#x2F;&gt;
こちらを御覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wqL0_5Ewomo&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;vue-jsgai-yao&quot;&gt;Vue.js概要&lt;&#x2F;h2&gt;
&lt;p&gt;Vue.jsとは、Javascriptフレームワークの一種です。&lt;br &#x2F;&gt;
昨今の開発では、実質Vue.jsとReactの二択になっている気がしますが、&lt;br &#x2F;&gt;
よく言われるのは、VueはReactよりも学習コストが低いという点です。&lt;br &#x2F;&gt;
（真偽は定かではありませんが。)&lt;&#x2F;p&gt;
&lt;p&gt;確かに、Vue.jsは、&lt;br &#x2F;&gt;
Reactよりもとっつきやすい印象があり、&lt;br &#x2F;&gt;
&lt;mark&gt;デザイナーの方なども、VueとReactなら、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Vueの方が良いという方は一定数いました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Reactは、やや関数型言語のような記法のため、&lt;br &#x2F;&gt;
書き方がやや難解になりやすいというのもあるのかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、Vue.jsは今でも人気のある&lt;br &#x2F;&gt;
フレームワークの一つです。&lt;&#x2F;p&gt;
&lt;p&gt;そんなVue.jsですが、Vue2とVue3では、&lt;br &#x2F;&gt;
&lt;strong&gt;書き方や構成などがかなり大きく変わりました&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;Vue2で広く使われていたライブラリが、&lt;br &#x2F;&gt;
Vue3ではあまり採用されなくなったり、&lt;br &#x2F;&gt;
文法なども変わりました。(ここでは、options api → composition apiへの&lt;br &#x2F;&gt;
デファクトスタンダードの変化について念頭においています)&lt;&#x2F;p&gt;
&lt;p&gt;そのため、&lt;strong&gt;その大きな変更や、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;未だVue3に対応していないライブラリがあることなどに、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;戸惑っている方もいるかと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、基本的には、Vue3への変更は良い変更とみなしていいものでして、&lt;br &#x2F;&gt;
Vue3になって、TypeScriptのサポートが強力になり、&lt;br &#x2F;&gt;
Composition ApiというReactに似たような(?)&lt;br &#x2F;&gt;
書き方が主流になったので、&lt;br &#x2F;&gt;
Options Apiの弱点であった、処理が散らばった書き方というものを&lt;br &#x2F;&gt;
克服できるようになりました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;extras&#x2F;composition-api-faq.html#will-options-api-be-deprecated&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;extras&#x2F;composition-api-faq.html#will-options-api-be-deprecated&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、個人的な印象としては、&lt;br &#x2F;&gt;
Vue3 CompositionAPIの構成であれば、&lt;br &#x2F;&gt;
Reactと遜色はあまりないと感じています。&lt;br &#x2F;&gt;
（ライブラリ等の対応状況は懸念点ではありますが、&lt;br &#x2F;&gt;
やがて対応されて、技術的に枯れることを信じて)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;そのため今からVue.jsを学ぶことは、&lt;br &#x2F;&gt;
十分有意義なことだと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsについては、案件数も多く、&lt;br &#x2F;&gt;
使用している企業も多いので、&lt;br &#x2F;&gt;
その点でもそこまで心配はいらないと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vue3hanzuon&quot;&gt;Vue3ハンズオン&lt;&#x2F;h2&gt;
&lt;p&gt;概要はこれぐらいにして、&lt;br &#x2F;&gt;
実際にコードを書いてみましょう。&lt;&#x2F;p&gt;
&lt;p&gt;Vue3の強みは、何と言っても、&lt;br &#x2F;&gt;
&lt;strong&gt;Composition apiとTypeScriptサポート&lt;&#x2F;strong&gt;にあるので、&lt;br &#x2F;&gt;
本記事でもこの2つを採用していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dockerhuan-jing-nogou-zhu&quot;&gt;Docker環境の構築&lt;&#x2F;h3&gt;
&lt;p&gt;今回はRailsプロジェクトと同じディレクトリ構成として、&lt;br &#x2F;&gt;
下記のようにします。&lt;&#x2F;p&gt;
&lt;p&gt;Railsの環境構築手順自体は、&lt;br &#x2F;&gt;
こちらで解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;159&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;また、下記ではDockerを使っていきますので、&lt;br &#x2F;&gt;
Dockerの基礎知識に不安がある方は、下記の記事を御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1077&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;まずは、docker-compose.ymlファイルです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;version: &amp;#39;3.9&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  db:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    image: postgres&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .&#x2F;api&#x2F;tmp&#x2F;db:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      POSTGRES_PASSWORD: password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  front:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    build: .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    working_dir: &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .:&#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - &amp;quot;5173:5173&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  api:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    build: .&#x2F;api&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    command: bash -c &amp;quot;rm -f api&#x2F;tmp&#x2F;pids&#x2F;server.pid &amp;amp;&amp;amp; bundle exec rails s -p 4000 -b &amp;#39;0.0.0.0&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    stdin_open: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tty: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .&#x2F;api:&#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - &amp;quot;4000:4000&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    depends_on:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - db&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここでは、apiにRailsを使い、&lt;br &#x2F;&gt;
dbにpostgre sqlを使用しています。&lt;&#x2F;p&gt;
&lt;p&gt;この2つのコンテナ構築については、&lt;br &#x2F;&gt;
上記のRuby on Rails環境構築のものを、&lt;br &#x2F;&gt;
基本そのまま使用していますので、&lt;br &#x2F;&gt;
&lt;strong&gt;新しいコンテナは、frontになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;portは5173にし、workdirは、&#x2F;appにします。&lt;br &#x2F;&gt;
Dockerfileは下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FROM node:18-slim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WORKDIR &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RUN apt-get update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;node18系を採用しました。&lt;br &#x2F;&gt;
imageの種類としては、slimを使いました。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、特にこれといった特徴がない、&lt;br &#x2F;&gt;
簡素なコンテナです。&lt;&#x2F;p&gt;
&lt;p&gt;一旦、構成はこのようなシンプルな感じでいきます。&lt;br &#x2F;&gt;
記載したら、buildしましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;その後、コンテナを立ち上げます。&lt;br &#x2F;&gt;
起動終了した後に無駄にコンテナ残したくないので、&lt;br &#x2F;&gt;
--rmオプションも付けまして、npm init vue@latestします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose run --rm front npm init vue@latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで新規プロジェクトを作成できます。&lt;&#x2F;p&gt;
&lt;p&gt;プロジェクト名は、frontとし、&lt;br &#x2F;&gt;
これで作成すると、ルートにfrontというディレクトリが作成されます。&lt;&#x2F;p&gt;
&lt;p&gt;さて、ここでDockerfileを修正します。&lt;br &#x2F;&gt;
場所もfrontディレクトリ直下に移動します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FROM node:18-slim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WORKDIR &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COPY . &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RUN apt-get update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;COPYの命令を付け加えました。&lt;&#x2F;p&gt;
&lt;p&gt;docker-compose.ymlも修正します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;version: &amp;#39;3.9&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  db:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    image: postgres&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .&#x2F;api&#x2F;tmp&#x2F;db:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      POSTGRES_PASSWORD: password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  front:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    build: .&#x2F;front&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    working_dir: &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .&#x2F;front:&#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - &amp;quot;5173:5173&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  api:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    build: .&#x2F;api&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    command: bash -c &amp;quot;rm -f api&#x2F;tmp&#x2F;pids&#x2F;server.pid &amp;amp;&amp;amp; bundle exec rails s -p 4000 -b &amp;#39;0.0.0.0&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    stdin_open: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    tty: true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - .&#x2F;api:&#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - &amp;quot;4000:4000&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    depends_on:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      - db&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;volumesの設定を付け加え、&lt;br &#x2F;&gt;
buildのディレクトリ階層を加えます。&lt;&#x2F;p&gt;
&lt;p&gt;もう一度、buildします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;yarn installも走らせます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose run --rm front yarn install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;くどいですが、&lt;br &#x2F;&gt;
もう一度Dockerfileを修正します。&lt;br &#x2F;&gt;
CMDを加えます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;FROM node:18-slim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WORKDIR &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;COPY . &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RUN apt-get update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CMD [&amp;quot;yarn&amp;quot;, &amp;quot;dev&amp;quot;, &amp;quot;--host&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ここまで来たら、&lt;br &#x2F;&gt;
あとは下記で立ち上げます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker compose up -d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;createappguan-shu&quot;&gt;createApp関数&lt;&#x2F;h3&gt;
&lt;p&gt;さて、環境構築が終わったので、&lt;br &#x2F;&gt;
簡単にVue.jsの起動の仕組みを解説します。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsの場合、&lt;br &#x2F;&gt;
&lt;strong&gt;createApp関数で、アプリケーションのインスタンスを開始しています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;application.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;application.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;作成されたばかりだと、&lt;br &#x2F;&gt;
このように設定されているかと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { createApp }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { createPinia }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;pinia&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; App&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;App.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; router&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;router&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;assets&#x2F;main.css&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createApp&lt;&#x2F;span&gt;&lt;span&gt;(App)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;createPinia&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(router)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mount&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;#app&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;vueからcreateAppをimportして、&lt;br &#x2F;&gt;
App.vueをcreateAppの引数に渡しています。&lt;&#x2F;p&gt;
&lt;p&gt;このApp.vueとは何でしょうか？&lt;br &#x2F;&gt;
その前に、フロントエンドの基本用語である、&lt;br &#x2F;&gt;
Componentについて解説します。(App.vueもComponentです)&lt;&#x2F;p&gt;
&lt;h4 id=&quot;componenttoha&quot;&gt;Componentとは？&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;strong&gt;Componentとは、webパーツの構成パーツのことを指します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
平たく言うと、部品です。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、よくあるWebサイトなどに、&lt;br &#x2F;&gt;
ログインボタンなどがあると思います。&lt;br &#x2F;&gt;
あれも、いわばログインボタンComponentのようにみなすこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、よくあるお問い合わせフォームなんかも、&lt;br &#x2F;&gt;
Componentといえるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;これらは、&lt;mark&gt;再利用性が特徴で、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;様々な場所でComponentを呼び出すことで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;共通化することができます&lt;&#x2F;mark&gt;。(いわば共通化の手段ですね)&lt;&#x2F;p&gt;
&lt;p&gt;Component、すなわち部品をどの程度の大きさで分割するかは、&lt;br &#x2F;&gt;
開発者によって、異なるので一概には言えませんが、&lt;br &#x2F;&gt;
例えば下記の画像だと、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vue3-init&#x2F;Screen-Shot-2023-03-27-at-9.15.58-1024x551.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;右側にある、Content1とかContent2とかは、&lt;br &#x2F;&gt;
カード形式のコンポネントとみなすことができそうですね。&lt;&#x2F;p&gt;
&lt;p&gt;また、そうした小さいコンポネントをひとまとめにして、&lt;br &#x2F;&gt;
Contentカードが4つあるコンポネントとみなすこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;なので、Componentとは、&lt;br &#x2F;&gt;
再利用が可能な部品のことですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、このようなCompoent設計には、&lt;br &#x2F;&gt;
&lt;strong&gt;Atomic Designという有名な思想がありますので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;興味がある方は調べてみてください。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;mount&quot;&gt;mount&lt;&#x2F;h4&gt;
&lt;p&gt;さて、createAppに戻りますが、&lt;br &#x2F;&gt;
createAppに渡しているのは、コンポーネント(App.vue)ですね。&lt;&#x2F;p&gt;
&lt;p&gt;コンポネントは、他のコンポーネントを子要素として保持できるのですが、&lt;br &#x2F;&gt;
App.vueは、そのようなルートコンポネントの役割を果たしています。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、この場合、&lt;br &#x2F;&gt;
デフォルトで作成されている、&lt;br &#x2F;&gt;
App.vueがルートコンポーネントになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;script setup lang&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ts&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { RouterLink, RouterView }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue-router&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; HelloWorld&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;components&#x2F;HelloWorld.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;template&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;header&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;img alt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;Vue logo&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;logo&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; src&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;@&#x2F;assets&#x2F;logo.svg&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; width&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;125&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; height&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;125&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;wrapper&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;HelloWorld msg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;You did it!&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;nav&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;RouterLink to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;Home&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;RouterLink&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;        &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;RouterLink to&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;about&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;About&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;RouterLink&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;nav&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;header&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;RouterView&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;template&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vue.jsの場合、&lt;br &#x2F;&gt;
Compoentは、一つのVueファイルにまとめることが穂とんです。&lt;&#x2F;p&gt;
&lt;p&gt;App.vueの中身を見ますと、この中で、&lt;br &#x2F;&gt;
HelloWorld.vueのコンポーネントがインポートされているので、&lt;br &#x2F;&gt;
これは子コンポーネントになります。&lt;&#x2F;p&gt;
&lt;p&gt;このように、コンポーネントからコンポーネントを呼び出していって、&lt;br &#x2F;&gt;
アプリケーションが構成されていくイメージですね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;こうした要素を画面にレンダリングするには、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;mount(紐づけのようなイメージ)する必要があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mount&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;#app&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;#appは、id=appですが、&lt;br &#x2F;&gt;
この要素は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;!&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;DOCTYPE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; lang&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;en&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  　中略&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;head&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; id&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;app&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;div&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; type&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;module&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; src&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;src&#x2F;main.ts&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;script&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;body&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;html&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;の&amp;lt;div id=&quot;app&quot;&amp;gt;の部分にあります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、この部分にapp.vueのHTMLが&lt;br &#x2F;&gt;
挿入されていくようなイメージですね。&lt;&#x2F;p&gt;
&lt;p&gt;先程説明した、&lt;br &#x2F;&gt;
App.vueとかHelloWorld.vueみたいなコンポネントは、&lt;br &#x2F;&gt;
この&amp;lt;div&amp;gt;タグ内に表示される仕組みになっており、&lt;br &#x2F;&gt;
そのようにレンダリングさせる実装が、mountといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、createAppから、最終的に、&lt;br &#x2F;&gt;
#appの部分にmountされるという流れになっている感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tenpuretogou-wen&quot;&gt;テンプレート構文&lt;&#x2F;h3&gt;
&lt;p&gt;テンプレート構文とは、&lt;br &#x2F;&gt;
その内部を、Javascriptのコードにしてくれるものです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;template-syntax.html&quot;&gt;https:&#x2F;&#x2F;ja.vuejs.org&#x2F;guide&#x2F;essentials&#x2F;template-syntax.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ドキュメントにも書かれていますが、&lt;br &#x2F;&gt;
やや説明が難しいですよね。&lt;&#x2F;p&gt;
&lt;p&gt;要は、vueファイルのhtmlの部分に、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;template&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;div class=&amp;quot;wrapper&amp;quot;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {{&#x2F;* ここにJavascriptのコードを実行できる *&#x2F;}}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    &amp;lt;&#x2F;div&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;lt;&#x2F;template&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに、&lt;br &#x2F;&gt;
{{&#x2F;* *&#x2F;}} のマスタッシュ構文というものを使って、&lt;br &#x2F;&gt;
その中にJavaScriptのコードを埋め込むことができます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、挿入できるのは式に限られるので、&lt;br &#x2F;&gt;
if文とか、変数代入みたいな、文を実行することはできません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、かわりに三項演算子を使います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{{&#x2F;* Boolean(&amp;#39;test&amp;#39;) ? 1 + 3 : 23 * 4 *&#x2F;}}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このような感じで、JSのコードを入れることができます。&lt;br &#x2F;&gt;
この場合、三項演算子でtrueになるので、&lt;br &#x2F;&gt;
1 + 3で4が表示されます。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScript&#x2F;TypeScriptの基本文法については、&lt;br &#x2F;&gt;
下記の記事で紹介しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;21&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記のようなやや複雑な処理を&lt;br &#x2F;&gt;
何でもかんでもテンプレート構文に詰め込むのは、&lt;br &#x2F;&gt;
コードが肥大化してメンテナンス性が下がるので、&lt;br &#x2F;&gt;
あまり良くはありません。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、算出プロパティを使うのがいいでしょう。&lt;br &#x2F;&gt;
算出プロパティについては、こちらの記事で解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;559&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vuetifyinsutoru&quot;&gt;Vuetifyインストール&lt;&#x2F;h3&gt;
&lt;p&gt;Vuetifyとは、Vue2でのデファクトスタンダードだった、&lt;br &#x2F;&gt;
UIフレームワークのことです。&lt;&#x2F;p&gt;
&lt;p&gt;Vue3の場合、必ずしもVuetifyがデファクトというわけでもなくなりましたが、&lt;br &#x2F;&gt;
使いやすいので、本記事ではVuetifyを採用します。&lt;br &#x2F;&gt;
(※&lt;strong&gt;Vue3だとVuetifyのドキュメントは一部整備中だったりするので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;企業などでの技術選定は慎重になったほうが良いかもしれません&lt;&#x2F;strong&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;導入方法としては、&lt;br &#x2F;&gt;
まず、yarnをインストールします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;npm install --global yarn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;yarnを入れたら、&lt;br &#x2F;&gt;
下記でプロジェクトを作成してくれます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;yarn create vuetify&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vuetifyjs.com&#x2F;en&#x2F;getting-started&#x2F;installation&#x2F;&quot;&gt;https:&#x2F;&#x2F;vuetifyjs.com&#x2F;en&#x2F;getting-started&#x2F;installation&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;UIフレームワークで、プロジェクトを作成してくれるのは、&lt;br &#x2F;&gt;
なかなかに感動ものですよね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、おそらく大抵の場合、&lt;br &#x2F;&gt;
既存のVueプロジェクトにインストールすることになると思うので、&lt;br &#x2F;&gt;
実際は、下記のようなコマンドを実行することになるでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;yarn add vuetify@^3.1.11&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;導入したら、&lt;br &#x2F;&gt;
あとはmain.tsをvuetifyを入れるよう書き換えます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { createApp }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { createPinia }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;pinia&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; App&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;App.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; router&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;router&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;.&#x2F;assets&#x2F;main.css&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vuetify&#x2F;styles&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; { createVuetify }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vuetify&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; components&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vuetify&#x2F;components&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; directives&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; from&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vuetify&#x2F;directives&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; vuetify&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createVuetify&lt;&#x2F;span&gt;&lt;span&gt;({&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  components,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  directives,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; app&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; createApp&lt;&#x2F;span&gt;&lt;span&gt;(App)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;createPinia&lt;&#x2F;span&gt;&lt;span&gt;())&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(router)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;use&lt;&#x2F;span&gt;&lt;span&gt;(vuetify)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;app.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;mount&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;#app&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これでvuetifyを使うことができます。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;519&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;578&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;559&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;606&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;611&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;638&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Git&#x2F;Githubを0から使えるレベルまで】概念と基本コマンド解説</title>
        <published>2023-03-21T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/git-github/"/>
        <id>https://reisuta.com/git-github/</id>
        
        <content type="html" xml:base="https://reisuta.com/git-github/">&lt;p&gt;プログラミングや開発をする際に、&lt;br &#x2F;&gt;
絶対に使用するツールが存在します。&lt;&#x2F;p&gt;
&lt;p&gt;プログラミング言語やエディターとかではありません。&lt;&#x2F;p&gt;
&lt;p&gt;そうGitです。&lt;br &#x2F;&gt;
(あとは&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;Docker&lt;&#x2F;a&gt;とかもありますが、&lt;br &#x2F;&gt;
Gitに比べると必須とまではいかないかなと思います。)&lt;&#x2F;p&gt;
&lt;p&gt;Gitがなければ、&lt;br &#x2F;&gt;
開発は始まりません。&lt;br &#x2F;&gt;
それぐらい、Gitは重要なものです。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、Gitは概念が複雑だったり、&lt;br &#x2F;&gt;
コマンドが多かったりと学習コストが高いことでも有名です。&lt;&#x2F;p&gt;
&lt;p&gt;そこで本記事では、0からGitが最低限実務で使えるレベルになるまでに、&lt;br &#x2F;&gt;
必要なことを完全解説します。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gittoha&quot;&gt;Gitとは？&lt;&#x2F;h2&gt;
&lt;p&gt;さて、まずGitとは？なんでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;Gitとは、分散型バージョン管理システムと&lt;br &#x2F;&gt;
定義されることが多いですが、&lt;br &#x2F;&gt;
平たく言うと、&lt;mark&gt;&lt;strong&gt;ファイルの変更履歴とかを管理してくれるものです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一人で開発しているとあまり問題にならないかもしれませんが、&lt;br &#x2F;&gt;
チームで開発している場合、&lt;br &#x2F;&gt;
誰がどういう変更をしたのかということはすごく重要なことです。&lt;&#x2F;p&gt;
&lt;p&gt;ある変更によって、&lt;br &#x2F;&gt;
サーバーがエラーによってダウンしてしまったりした大変ですよね。&lt;br &#x2F;&gt;
&lt;s&gt;その際の犯人を炙り出して糾弾するために、&lt;&#x2F;s&gt;&lt;br &#x2F;&gt;
その際のどの変更によってダウンしているのかをすばやく解明するために、&lt;br &#x2F;&gt;
Gitで変更を管理することはものすごく大切なことです。&lt;&#x2F;p&gt;
&lt;p&gt;試しにGitを使わないとどうなるとかいうと、&lt;br &#x2F;&gt;
おそらくDropboxとか、Googleドライブのような、&lt;br &#x2F;&gt;
クラウドサービスを使う羽目になると思います。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、こうなると地獄です。&lt;br &#x2F;&gt;
これらの場合だと、まず誰もが変更しやすいという点と、&lt;br &#x2F;&gt;
変更履歴を管理できないということと、&lt;br &#x2F;&gt;
新規メンバーに対して、いちいち細かいファイルの履歴などを&lt;br &#x2F;&gt;
送る必要があることです。&lt;&#x2F;p&gt;
&lt;p&gt;細かいソースコードのバージョンとかを管理するソフトウェア開発で、&lt;br &#x2F;&gt;
上記のやり方は、実質上不可能に近いです。&lt;br &#x2F;&gt;
(本当にあった怖い話として、Dropboxで開発をしている現場も目撃したことあります。)&lt;&#x2F;p&gt;
&lt;p&gt;Gitを使えば、バージョンを適切に管理できますし、&lt;br &#x2F;&gt;
バージョンを戻すこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;誰がどういう修正を加えたかもわかりますし、&lt;br &#x2F;&gt;
新規メンバーは、リポジトリをcloneすればいいだけなので、&lt;br &#x2F;&gt;
不毛なコミュニケーションコストも発生しません。&lt;&#x2F;p&gt;
&lt;p&gt;Gitはソフトウェア開発の女神様なんです。&lt;&#x2F;p&gt;
&lt;p&gt;さて、早速我らが女神のGitを使ってみましょう。&lt;&#x2F;p&gt;
&lt;p&gt;Gitは基本的にはCLIツールで、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でバージョンが表示されたらインストールされています。&lt;&#x2F;p&gt;
&lt;p&gt;MacやLinuxとかなら、&lt;br &#x2F;&gt;
何もしなくてもインストールされているかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;Gitの便利さは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;筆舌に尽くしがたいものがあり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Gitがない開発は考えられないし、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;考えたくもないレベルで重要なツールです。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
(しつこいですね)&lt;&#x2F;p&gt;
&lt;p&gt;私は、一度だけDropboxを使って開発をしている現場に参画したことが&lt;br &#x2F;&gt;
ありましたが、控えめに言って地獄でした。&lt;&#x2F;p&gt;
&lt;p&gt;開発は、膨大なファイルを複数人の変更履歴とかを詳細に管理することができないと、&lt;br &#x2F;&gt;
成り立たないので、Gitなしの開発は、地獄です。&lt;br &#x2F;&gt;
(しつこいですね)&lt;&#x2F;p&gt;
&lt;p&gt;Gitは学習コストがそれなりに高いので、&lt;br &#x2F;&gt;
最初のうちは導入するメリットは感じにくいかもしれませんが、&lt;br &#x2F;&gt;
そのうちGitの便利さを痛感する日が必ずきます。&lt;&#x2F;p&gt;
&lt;p&gt;絶対にいれましょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;githubtoha&quot;&gt;Githubとは？&lt;&#x2F;h2&gt;
&lt;p&gt;GitがCLIツールなのに対し、&lt;br &#x2F;&gt;
Githubは基本的には、Webサービスのことなので、&lt;br &#x2F;&gt;
GUIツールにあたります。&lt;&#x2F;p&gt;
&lt;p&gt;Gitで管理しているローカルのファイルを、&lt;br &#x2F;&gt;
Githubに反映させることで、&lt;br &#x2F;&gt;
ローカル依存をなくし、誰もが同じディレクトリをダウンロードできるようにしてくれます。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、こんな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こうしたGithubのリポジトリに、&lt;br &#x2F;&gt;
開発しているアプリケーションをpushして、&lt;br &#x2F;&gt;
他の開発者がpullしたりcloneしたりすることを可能にしているといった感じです。&lt;br &#x2F;&gt;
(pullやcloneなどについては後ほど解説します。)&lt;&#x2F;p&gt;
&lt;p&gt;pushとは、ローカルのファイルをリモート（すなわちGithub）に&lt;br &#x2F;&gt;
反映させることで、&lt;br &#x2F;&gt;
pullとは、リモート（すなわちGithub)のファイルを&lt;br &#x2F;&gt;
ローカルに保存することにあたります。&lt;&#x2F;p&gt;
&lt;p&gt;昨今の開発では、基本的には、&lt;br &#x2F;&gt;
GitとGithubを別々に使って開発するようなことはないので、&lt;br &#x2F;&gt;
両方使うものと思っていただいて問題ないです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gitlab&quot;&gt;GitLab&lt;&#x2F;h3&gt;
&lt;p&gt;こうしたリモートのGit管理サービスは、&lt;br &#x2F;&gt;
Githubだけではなく、&lt;br &#x2F;&gt;
GitLabというものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;今のところ(執筆時点)は、&lt;br &#x2F;&gt;
まだGithubのほうが使用者が多い印象ですが、&lt;br &#x2F;&gt;
今後はGitLabも増えてくるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;GitLabとGithubの両者の差異が、&lt;br &#x2F;&gt;
めちゃくちゃあるというわけではないので、&lt;br &#x2F;&gt;
正直どちらを使っても良い気がします。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gitnoji-ben-noliu-re&quot;&gt;Gitの基本の流れ&lt;&#x2F;h2&gt;
&lt;p&gt;さて、GitやGithubがどういうものかについては、&lt;br &#x2F;&gt;
解説したので、Git開発での基本の流れについて&lt;br &#x2F;&gt;
解説していきたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Gitを使うにあたって、いくつかの用語が存在するので、&lt;br &#x2F;&gt;
まずはそれを解説していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ripozitori&quot;&gt;リポジトリ&lt;&#x2F;h3&gt;
&lt;p&gt;これは、Gitにおいては、基本的にはアプリケーションそのもので、&lt;br &#x2F;&gt;
&lt;mark&gt;アプリケーションを起動するのに必要なすべてのファイルを集約した&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;単位のような感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、下記のリンクにあるような&lt;br &#x2F;&gt;
ファイルの集合体みたいなもの（アプリケーションに必要なファイル）を&lt;br &#x2F;&gt;
Githubに登録しておく感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のようなものを一般に、&lt;br &#x2F;&gt;
リポジトリと呼びます。&lt;&#x2F;p&gt;
&lt;p&gt;リポジトリをクローンとかって言いますが、&lt;br &#x2F;&gt;
これは、中央のアプリケーションを持ってきて、&lt;br &#x2F;&gt;
開発に参画するための最初のステップです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kuron&quot;&gt;クローン&lt;&#x2F;h3&gt;
&lt;p&gt;さて、上記のリポジトリがあったら、&lt;br &#x2F;&gt;
それをローカルに保存したいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;その際、クローンという作業を行います。&lt;br &#x2F;&gt;
これによって、ローカルにGithubのリポジトリと同じファイルを&lt;br &#x2F;&gt;
持ってくることができます。&lt;&#x2F;p&gt;
&lt;p&gt;平たく言うと、複製ですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kai-fa-xiu-zheng-nado&quot;&gt;開発(修正など）&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そうしたクローンしたリポジトリになにか変更を加えるとします。&lt;br &#x2F;&gt;
新規機能を追加したり、バグを直したりと。&lt;&#x2F;p&gt;
&lt;p&gt;そうして修正を完了したら、&lt;br &#x2F;&gt;
その修正したやつをリモートのリポジトリにも反映させたいですよね。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、次はpushというのを行って、&lt;br &#x2F;&gt;
ローカルの内容をリモートに反映させます。&lt;&#x2F;p&gt;
&lt;p&gt;これで、リモートの内容が最新になりました。&lt;&#x2F;p&gt;
&lt;p&gt;ややはしょってはいますが、&lt;br &#x2F;&gt;
Git・Githubを使った基本的な開発の流れはこのような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;以上を踏まえて、&lt;br &#x2F;&gt;
具体的に使うコマンドを見てみましょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gitnokomando&quot;&gt;Gitのコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;GitはCLIツールなので、&lt;br &#x2F;&gt;
コマンドが色々あります。&lt;&#x2F;p&gt;
&lt;p&gt;全ては紹介しませんが、&lt;br &#x2F;&gt;
よく使う基本的なものを紹介していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;add&quot;&gt;add&lt;&#x2F;h3&gt;
&lt;p&gt;いきなり混乱することを言って恐縮ですが、&lt;br &#x2F;&gt;
pushをする前に、addとcommitをする必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;commitは平たく言うと、&lt;br &#x2F;&gt;
修正した差分をセーブするような感じですね。&lt;br &#x2F;&gt;
commitしないと、どこが変更されたのかを&lt;br &#x2F;&gt;
gitは管理できていないので、&lt;br &#x2F;&gt;
pushしたところで何も変わらないといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;そして、Gitの場合、&lt;br &#x2F;&gt;
commitをする前に、&lt;br &#x2F;&gt;
このaddという操作をすることが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;strong&gt;ファイルをインデックスに追加する操作です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;docs&#x2F;git-add&#x2F;ja&quot;&gt;https:&#x2F;&#x2F;git-scm.com&#x2F;docs&#x2F;git-add&#x2F;ja&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、この説明だけで&lt;br &#x2F;&gt;
「うんなるほど」って分かる人は、&lt;br &#x2F;&gt;
そんないないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そもそもGitには、commit前にファイルを置いておくようなモードがあって、&lt;br &#x2F;&gt;
&lt;strong&gt;ステージング&lt;&#x2F;strong&gt;って言われることも多いです。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、正確にはファイルを置くモードというよりは、&lt;br &#x2F;&gt;
commitするファイルを登録して、&lt;br &#x2F;&gt;
なんでもかんでもcommitできないようにしているといった感じです。&lt;&#x2F;p&gt;
&lt;p&gt;このgit addしたファイルは、&lt;br &#x2F;&gt;
インデックスに追加されているので、&lt;br &#x2F;&gt;
commitができるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;インデックスに追加されていなければ、&lt;br &#x2F;&gt;
そもそもcommitができない感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;なんで、こんなめんどくさい感じになっているのかというと、&lt;br &#x2F;&gt;
そもそもcommit自体が、ある意味修正の歴史みたいな感じになるので、&lt;br &#x2F;&gt;
同じcommitに含めるのがふさわしくないものが差分に出るかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;その際、commitに入れる差分と入れない差分を選り分けることが可能なように、&lt;br &#x2F;&gt;
このステージングみたいな、commitの前のモードが存在する感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、最初のうちは、&lt;br &#x2F;&gt;
よくわかんないと思うので、&lt;br &#x2F;&gt;
とりあえず、**「commit前にaddしないとな！」**って&lt;br &#x2F;&gt;
覚えておけば概ね大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;実際、使用する際も、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; add test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいに特定のファイルだけをaddするという使い方よりも、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; add .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というようにカレントをすべてaddするという&lt;br &#x2F;&gt;
ガバガバな使い方をすることがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;addの仕組みがよくわからなければ、&lt;br &#x2F;&gt;
とりあえずcommit前にgit add . ってするんだなぐらいの&lt;br &#x2F;&gt;
理解でも一旦大丈夫です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;commit&quot;&gt;commit&lt;&#x2F;h3&gt;
&lt;p&gt;既にaddのところでも、&lt;br &#x2F;&gt;
commitについて簡単に言及しましたが、&lt;br &#x2F;&gt;
&lt;strong&gt;commitは、平たく言えばセーブです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ポケモンとかで、&lt;br &#x2F;&gt;
セーブするみたいなやつあったと思いますが、&lt;br &#x2F;&gt;
まあ、あれです。（概ねあってるはず...w)&lt;&#x2F;p&gt;
&lt;p&gt;Gitは分散型バージョン管理システムと&lt;br &#x2F;&gt;
言いましたが、&lt;mark&gt;このcommitはまさに、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;管理しているGitに新しい歴史（修正）を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;刻むような感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、Gitとは、&lt;br &#x2F;&gt;
&lt;strong&gt;この歴史の積み重ね、&lt;br &#x2F;&gt;
commitの積み重ねを管理しているシステム&lt;&#x2F;strong&gt;といっても&lt;br &#x2F;&gt;
過言ではないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;docs&#x2F;git-commit&quot;&gt;https:&#x2F;&#x2F;git-scm.com&#x2F;docs&#x2F;git-commit&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、安易にコミットしてしまうと、&lt;br &#x2F;&gt;
現状のリポジトリに新しい歴史を刻んでしまうも&lt;br &#x2F;&gt;
同然なので、よく考えてcommitする必要があります(特大ブーメラン）&lt;&#x2F;p&gt;
&lt;p&gt;コミットには、基本的に&lt;br &#x2F;&gt;
コミットメッセージをつけますが、&lt;br &#x2F;&gt;
やり方としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;first commit&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいに、-mオプションつけてやるのが&lt;br &#x2F;&gt;
多いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;このメッセージは、&lt;br &#x2F;&gt;
git logとかでも確認できますし、&lt;br &#x2F;&gt;
pushしたGithubとかでもチェックできます。&lt;&#x2F;p&gt;
&lt;p&gt;他の開発者が、&lt;br &#x2F;&gt;
そのcommitでどういう修正をしたのかが、&lt;br &#x2F;&gt;
簡単にわかるようにできると理想ですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、このコミットメッセージの付け方や、&lt;br &#x2F;&gt;
commitの単位の切り方とかで、&lt;br &#x2F;&gt;
エンジニアのレベル感を見破られてしまうことがあるので、&lt;br &#x2F;&gt;
気をつけましょう...&lt;br &#x2F;&gt;
（よくない例としては、&quot;Rspecインストール&quot;というコミットメッセージなのに、&lt;br &#x2F;&gt;
実際の修正内容は、FactorybotのインストールでRspecのインストールは別コミットに&lt;br &#x2F;&gt;
なってしまっていたりとかですかね。）&lt;&#x2F;p&gt;
&lt;p&gt;間違っても、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;疲れたから一旦commit&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいなコミットメッセージはやめましょう。&lt;br &#x2F;&gt;
恥を刻んでしまいます。（ギャグならいいですが）&lt;&#x2F;p&gt;
&lt;p&gt;あと、理想なら英語でcomitメッセージを書くのがいいですが、&lt;br &#x2F;&gt;
なんだかんだ日本語で書いている現場が多いので、&lt;br &#x2F;&gt;
プロジェクトに合わせれば問題ないと思います。&lt;br &#x2F;&gt;
（みんな日本語で書いているのに英語で書いても&lt;br &#x2F;&gt;
浮く気がするので...)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;push&quot;&gt;push&lt;&#x2F;h3&gt;
&lt;p&gt;pushは、CLIのgitのみでは、&lt;br &#x2F;&gt;
使わないコマンドですね。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;strong&gt;リモートのGithubに、&lt;br &#x2F;&gt;
ローカルのGitのcommit履歴とかを反映させます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;いくら、ローカルでずっとgit commitしていても、&lt;br &#x2F;&gt;
リモートに反映できなかれば、&lt;br &#x2F;&gt;
他の開発者はその変更を取り込むことができませんからね。&lt;&#x2F;p&gt;
&lt;p&gt;使い方としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; push origin main&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいな感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、-fオプションは、強制的に&lt;br &#x2F;&gt;
pushするオプションですが、&lt;br &#x2F;&gt;
他の開発者にも影響を与えるリモートのリポジトリを&lt;br &#x2F;&gt;
強制的に書き換えてしまう力技のコマンドなので、&lt;br &#x2F;&gt;
使うときは慎重になりましょう。&lt;&#x2F;p&gt;
&lt;p&gt;下手すると、他の開発者のcommitが消し飛びます...&lt;&#x2F;p&gt;
&lt;p&gt;まあ、rebaseとかでcommitを書き換えたりしたとき以外は、&lt;br &#x2F;&gt;
使うべきではありませんね。rebaseの際も、&lt;br &#x2F;&gt;
他に影響がないか十分考慮してから行うべきです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pull&quot;&gt;pull&lt;&#x2F;h3&gt;
&lt;p&gt;ずっと、ローカルで開発している最中に、&lt;br &#x2F;&gt;
ほかの開発者がリモートにcommitをしたとします。&lt;&#x2F;p&gt;
&lt;p&gt;そうすると、リモートは新しくなっているのに対し、&lt;br &#x2F;&gt;
自分のローカルは古いままという状態になります。&lt;&#x2F;p&gt;
&lt;p&gt;こういった際、リモートの最新の状態を取り込むことができるコマンドが、&lt;br &#x2F;&gt;
このpullです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;branch&quot;&gt;branch&lt;&#x2F;h3&gt;
&lt;p&gt;Gitには、ブランチという概念があります。&lt;&#x2F;p&gt;
&lt;p&gt;詳しくは、こちらのドキュメントにも書かれていますが、&lt;br &#x2F;&gt;
平たく言えば、作業領域のことです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;git-scm.com&#x2F;book&#x2F;ja&#x2F;v2&#x2F;Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF&quot;&gt;https:&#x2F;&#x2F;git-scm.com&#x2F;book&#x2F;ja&#x2F;v2&#x2F;Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;gitでは、デフォルトで、&lt;br &#x2F;&gt;
mainやmasterというブランチが存在しますが、&lt;br &#x2F;&gt;
基本的にこのブランチで開発をすることはほとんどありません。&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、仮にmasterで作業し続けてしまうと、&lt;br &#x2F;&gt;
なにか致命的なバグとかが起きた際、&lt;br &#x2F;&gt;
本番を別のブランチ（バグが起きていないブランチ）に戻すということが&lt;br &#x2F;&gt;
できなくなり、サービスが止まってしまうことになりかねないからです。&lt;&#x2F;p&gt;
&lt;p&gt;仮にブランチを分けて開発を進め、&lt;br &#x2F;&gt;
masterには、バグがない状態をキープして、&lt;br &#x2F;&gt;
最新機能の開発とかは、別のブランチで行っていけば、&lt;br &#x2F;&gt;
仮に別のブランチでバグが起きてもmasterには影響を与えません。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、ブランチを分けることは、&lt;br &#x2F;&gt;
Gitのバージョン管理システムを最大に活かすことであり、&lt;br &#x2F;&gt;
ブランチを分けなければ、実質的にはバージョンを管理できていないようなものです。&lt;&#x2F;p&gt;
&lt;p&gt;masterのような、デフォルトのブランチをずっと使っていると、&lt;br &#x2F;&gt;
他の開発者のコミットが即座に反映されてしまうため、&lt;br &#x2F;&gt;
PRなどを挟むこともできなくなります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、基本的に&lt;br &#x2F;&gt;
ブランチを切って開発することは必須です。&lt;&#x2F;p&gt;
&lt;p&gt;さて、ブランチの重要性はそんな感じですが、&lt;br &#x2F;&gt;
例えば、何かをインストールするという修正を加えたい場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; checkout&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; feature&#x2F;install-something&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに新しいブランチを作成して、&lt;br &#x2F;&gt;
そこで作業するのが一般的です。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、feature&#x2F;install-somethingというのがブランチ名です。&lt;&#x2F;p&gt;
&lt;p&gt;そして、ブランチを切って、&lt;br &#x2F;&gt;
リモートにpushするときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; push origin feature&#x2F;install-something&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とブランチ名を指定してpushします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;log&quot;&gt;log&lt;&#x2F;h3&gt;
&lt;p&gt;これは、文字通り、commitの履歴を確認できるコマンドです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;git log&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こちらもよく使う。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; log&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --oneline&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみにログに関しては、&lt;br &#x2F;&gt;
本記事の後半で紹介する、&lt;br &#x2F;&gt;
lazygitを使うと便利です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;status&quot;&gt;status&lt;&#x2F;h3&gt;
&lt;p&gt;これも、文字通り、現在のgitの状態を確認できるコマンドで、&lt;br &#x2F;&gt;
commitしてないファイルやインデックスされていないファイル、&lt;br &#x2F;&gt;
現在のブランチなどを表示してくれる。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Linuxのlsコマンドと似たような感じで、&lt;br &#x2F;&gt;
心を一旦落ち着かせたいときに打ったりするコマンドでもある。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;clone&quot;&gt;clone&lt;&#x2F;h3&gt;
&lt;p&gt;cloneは、Githubのリポジトリのコードを&lt;br &#x2F;&gt;
ローカルに持ってくることができるコマンドである。&lt;&#x2F;p&gt;
&lt;p&gt;新しくチーム開発に加わった際など、&lt;br &#x2F;&gt;
最初に行うのは、このコマンドで、&lt;br &#x2F;&gt;
コードを自分のローカルに持ってくることだろう。&lt;&#x2F;p&gt;
&lt;p&gt;cloneとかする際、&lt;br &#x2F;&gt;
ssh経由でcloneすることがほとんどなので、&lt;br &#x2F;&gt;
後にSSHの設定についても紹介したい。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gitbian-li-turu&quot;&gt;Git便利ツール&lt;&#x2F;h3&gt;
&lt;p&gt;以上のように、&lt;br &#x2F;&gt;
Gitには、様々なコマンドがあるので、&lt;br &#x2F;&gt;
いちいち打つのが大変なときもあります。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、個人的には、&lt;br &#x2F;&gt;
LazygitというCLIツールがおすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;jesseduffield&#x2F;lazygit&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;6oSZYOW1GYc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;上記の動画のような、&lt;br &#x2F;&gt;
視覚的なGit操作を可能にしてくれるので、&lt;br &#x2F;&gt;
いちいち個別のコマンドを打つ必要がなくなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;git-github&#x2F;Screenshot-2023-09-16-at-12.32.50-1024x452.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;機能が多く、&lt;br &#x2F;&gt;
最初は使いこなすのが大変ですが、&lt;br &#x2F;&gt;
なれると便利なので、試してみてください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sshshe-ding&quot;&gt;SSH設定&lt;&#x2F;h2&gt;
&lt;p&gt;最後にGitのSSH設定について&lt;br &#x2F;&gt;
触れます。&lt;&#x2F;p&gt;
&lt;p&gt;Gitのpushとかpullなどをする際に、&lt;br &#x2F;&gt;
SSH設定をしておいたほうが便利なケースが多いので、&lt;br &#x2F;&gt;
紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、sshキーを作ります&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ssh-keygen&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;次に、作成したsshキーを&lt;br &#x2F;&gt;
クリップボードにコピーします。&lt;&#x2F;p&gt;
&lt;p&gt;macとかなら、pbcopyコマンドが使えます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;pbcopy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ~&#x2F;.ssh&#x2F;id_rsa.pub&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;あとは、Githubの設定で&lt;br &#x2F;&gt;
sshキーの項目にこれを追加します。&lt;&#x2F;p&gt;
&lt;p&gt;追加したら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; git@github.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を実行して、Hiと返ってくれば問題ない。&lt;&#x2F;p&gt;
&lt;p&gt;これでgit remote addとかする際、&lt;br &#x2F;&gt;
sshの方を使えます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; remote add origin git@github.com:example&#x2F;test.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;cloneする際は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; clone git@github.com:sindresorhus&#x2F;fast-cli.git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という風に、sshの方でcloneします。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Linux便利コマンド8選 zoxide&#x2F;bat&#x2F;exa&#x2F;fzfなど</title>
        <published>2023-03-21T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/useful-command/"/>
        <id>https://reisuta.com/useful-command/</id>
        
        <content type="html" xml:base="https://reisuta.com/useful-command/">&lt;p&gt;いつもcdとかcatのように、&lt;br &#x2F;&gt;
お決まりのコマンドを使うと思いますが、&lt;br &#x2F;&gt;
最近だと、こういったコマンドの強化版みたいなやつも熱いので紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;本記事の内容は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;下記動画でもご紹介したので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;実際のハンズオンを視聴したい方は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;併せてご参考ください。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;iUqHP85XPm0&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;linuxkomando&quot;&gt;Linuxコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;さて、これらの便利コマンドを紹介する前に、&lt;br &#x2F;&gt;
そもそものLinuxの基本コマンドに自信が無い方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;linux-command-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で詳しく解説しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;64&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;さて、本記事でご紹介する、&lt;br &#x2F;&gt;
便利コマンドは、多くがRust製というのも&lt;br &#x2F;&gt;
特徴の一つです。&lt;&#x2F;p&gt;
&lt;p&gt;Rust製のツールは、&lt;br &#x2F;&gt;
優秀なものが多く、いつも感動を与えてくれます。&lt;br &#x2F;&gt;
(ターミナルのAlacrittyとかはRust製ですよね。&lt;br &#x2F;&gt;
ターミナルの&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;#alacritty&quot;&gt;おすすめ記事はこちら&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;以下、順番に紹介していきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zoxide&quot;&gt;zoxide&lt;&#x2F;h3&gt;
&lt;p&gt;まずは、zoxideです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;strong&gt;cdの完全上位互換のコマンドで&lt;br &#x2F;&gt;
個人的にはこれは入れないと仕事できないレベルです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajeetdsouza&#x2F;zoxide&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ajeetdsouza&#x2F;zoxide&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;これに関しては、何も考えずに&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;インストールしたら幸せになれます。(例外はありません)&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それくらい優秀なコマンドですので、&lt;br &#x2F;&gt;
早速インストールしましょう。&lt;&#x2F;p&gt;
&lt;p&gt;Macなら、いつもどおり、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install zoxide&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできる。&lt;br &#x2F;&gt;
基本的には、公式にインストール手順はすべて書いてあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ajeetdsouza&#x2F;zoxide&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ajeetdsouza&#x2F;zoxide&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あとは、シェルごとにパスを通す必要がありそうですね。&lt;br &#x2F;&gt;
zshなら、.zshrcに&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;eval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;zoxide&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; init zsh)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を追記します。&lt;&#x2F;p&gt;
&lt;p&gt;公式にfzfのインストールも推奨しているので、&lt;br &#x2F;&gt;
このタイミングで入れるのもありです。&lt;br &#x2F;&gt;
(ちなみに、fzfは本記事の後半で個別紹介します。)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install fzf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これでziコマンドが使えるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;ziコマンドは、死ぬほど便利で、&lt;br &#x2F;&gt;
zコマンドとかで行ったディレクトリパスとかを検索して移動できます。&lt;&#x2F;p&gt;
&lt;p&gt;私は、zoxideを入れる前は、&lt;br &#x2F;&gt;
.zshrcとかに、頻繁に行くディレクトリに関しては、&lt;br &#x2F;&gt;
aliasを設定していたのですが、&lt;br &#x2F;&gt;
zoxideがあれば、そんなalias設定もほとんど不要になります。&lt;&#x2F;p&gt;
&lt;p&gt;一度行ったディレクトリは、&lt;br &#x2F;&gt;
ziで検索しながら移動できるので、&lt;br &#x2F;&gt;
これは本当に本当に便利です。&lt;&#x2F;p&gt;
&lt;p&gt;階層が深いディレクトリの行き来も&lt;br &#x2F;&gt;
これがあれば一瞬ですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bat&quot;&gt;bat&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、batです。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&lt;mark&gt;Catコマンドの強化版で、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Syntaxハイライトと、gitのstatusとかを出力してくれます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;bat&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;bat&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;useful-command&#x2F;sc-1-1024x524.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらもいつもどおり、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install bat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできます。&lt;&#x2F;p&gt;
&lt;p&gt;これは、たしかに文句無しで便利なのですが、&lt;br &#x2F;&gt;
正直使うシチュエーションはあまり多くない印象です。&lt;&#x2F;p&gt;
&lt;p&gt;普段からcatを頻繁に使うという人であれば、&lt;br &#x2F;&gt;
嬉しいかもしれませんが、なんだかんだでcatってそんなに使わないコマンドだと&lt;br &#x2F;&gt;
思うので、catの上位互換だとしても、&lt;br &#x2F;&gt;
そのパワーを発揮できないことのほうが多い印象です(あくまで私基準の話)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;linux-command-basic&#x2F;#cat&quot;&gt;エディターがcatの人&lt;&#x2F;a&gt;は、&lt;br &#x2F;&gt;
batを死ぬほど使い倒せると思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;exa&quot;&gt;exa&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;mark&gt;こちらは、lsの強化コマンド&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ディレクトリとかを色付きで表示してくれます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ogham&#x2F;exa&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ogham&#x2F;exa&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらもいつもどおり&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;brew install exa&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできます。&lt;&#x2F;p&gt;
&lt;p&gt;このコマンドも文句なしに便利です。&lt;br &#x2F;&gt;
しかし、これはいつもインストールしたことを忘れてしまうコマンド&lt;br &#x2F;&gt;
個人的第一位です。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、Linuxコマンドにおいて、&lt;br &#x2F;&gt;
lsの存在感はでかすぎて、&lt;br &#x2F;&gt;
脳死モードだと、基本lsを打っています。&lt;&#x2F;p&gt;
&lt;p&gt;そして、lsのやっかいなところは、&lt;br &#x2F;&gt;
心を鎮めるためにとりあえずlsを打つということもある、&lt;br &#x2F;&gt;
ある種の鎮痛コマンドなので、&lt;br &#x2F;&gt;
なかなかlsからexaに移行できないのが私です。&lt;&#x2F;p&gt;
&lt;p&gt;もう、lsのaliasにexaを設定してしまうのもありかもしれませんが、&lt;br &#x2F;&gt;
個人的には、かの偉大なるlsを消してしまうことは、&lt;br &#x2F;&gt;
あまりしたくありません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、exaは、便利ではありますが、&lt;br &#x2F;&gt;
lsが強すぎて、まだ移行しづらいコマンドかなと思います(あくまで私基準の話です)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;procs&quot;&gt;procs&lt;&#x2F;h3&gt;
&lt;p&gt;こちらはpsコマンドの上位互換。&lt;br &#x2F;&gt;
色付きで表示してくれたりと、&lt;br &#x2F;&gt;
見やすく表示してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dalance&#x2F;procs&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;dalance&#x2F;procs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これも&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;brew install procs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできます。(いい加減くどいですね)&lt;&#x2F;p&gt;
&lt;p&gt;これも確かに便利かとは思うのですが、&lt;br &#x2F;&gt;
正直あんま使わない...笑&lt;&#x2F;p&gt;
&lt;p&gt;ただ、現職がサーバーエンジニアの方とか、&lt;br &#x2F;&gt;
プロセス監視をメインでやるような方なら、&lt;br &#x2F;&gt;
かなりの便利コマンドかと思うので、&lt;br &#x2F;&gt;
紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;あくまで私環境の話ですが、&lt;br &#x2F;&gt;
procsコマンドは若干重い気がするので、&lt;br &#x2F;&gt;
もしかすると、無難にpsとかのほうが、&lt;br &#x2F;&gt;
いい場合もあるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;psとprocsで使い分けられるといいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;htop&quot;&gt;htop&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、topコマンドの表示を見やすくしてくれるものです。&lt;br &#x2F;&gt;
非Rust製です。この系のコマンドは、htop以外にもたくさんあるので、&lt;br &#x2F;&gt;
好きなやつを見つけてほしいなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;htopの公式を見ると、&lt;br &#x2F;&gt;
インストール方法がやや煩雑に思えますが、&lt;&#x2F;p&gt;
&lt;p&gt;macなら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install htop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできてしまう。&lt;br &#x2F;&gt;
結局いつも通りでした。&lt;&#x2F;p&gt;
&lt;p&gt;改めて、Homebrewは偉大ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;htop-dev&#x2F;htop&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;htop-dev&#x2F;htop&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;htopコマンドに慣れると、&lt;br &#x2F;&gt;
普通のtopコマンドに戻れなくなると思うので、&lt;br &#x2F;&gt;
普段からtopコマンドを頻繁に使う人には、&lt;br &#x2F;&gt;
おすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;まあでも、topコマンドって、&lt;br &#x2F;&gt;
使いそうで、意外と使わないコマンドの代表例なので、&lt;br &#x2F;&gt;
インフラエンジニアとかでないとそこまで&lt;br &#x2F;&gt;
お世話になる機会は少ないかもしれませんが。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pastel&quot;&gt;pastel&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、&lt;strong&gt;色の操作ができるコマンドです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
やや他のコマンドとは毛色が違うので紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;使い所は、若干難しいが、&lt;br &#x2F;&gt;
CSSとかを書く際の参考になるかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;useful-command&#x2F;sc-2.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sharkdp&#x2F;pastel&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;色の一覧っぽいのを出すときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;pastel list&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で出てきます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、色を選ぶこともできるみたいで、&lt;br &#x2F;&gt;
これを使うと、カラーコードがよくわかんなくても、&lt;br &#x2F;&gt;
視覚的にいい感じの色のカラーコードを調べたりすることができます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; pastel pick&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;どちらかというと、&lt;br &#x2F;&gt;
デザイナー向けのツールなので、&lt;br &#x2F;&gt;
どの程度の人に刺さるかわかりませんが、&lt;br &#x2F;&gt;
少なくともCSSを書くエンジニアには、&lt;br &#x2F;&gt;
まあまあ役に立つコマンドかなと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fzf&quot;&gt;fzf&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、zoxideのところで&lt;br &#x2F;&gt;
すでにインストールされている方は、&lt;br &#x2F;&gt;
もう入っていると思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは、あいまい検索ができるツールで、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;find&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; fzf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とfindの結果をパイプにしたり、&lt;br &#x2F;&gt;
fzfのpreview機能を使って、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;fzf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --preview&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;head -100 {}&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;みたいにして、&lt;mark&gt;先頭100行を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;プレビューしながら検索みたいなことができます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;すでに紹介したbatコマンドと組み合わせると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;fzf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --preview&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;bat  --color=always --style=header,grid --line-range :100 {}&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、alias設定するとめちゃくちゃ便利そうですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;fzf&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;fzf&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;fzfは、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;&quot;&gt;Vimのプラグイン周り&lt;&#x2F;a&gt;でも&lt;br &#x2F;&gt;
結構お目にかかるCLIツールなので、&lt;br &#x2F;&gt;
知っている方も多いかもしれませんが、&lt;br &#x2F;&gt;
意外と、単体でターミナルで実行したことは無いかなと思い、&lt;br &#x2F;&gt;
紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;Neovimを使っていると、&lt;br &#x2F;&gt;
telescope.nvimみたいなぶっ壊れプラグインを使うことが&lt;br &#x2F;&gt;
できるので、上記のような死ぬほど便利なコマンドを&lt;br &#x2F;&gt;
使わずとも似たようなことができてしまうのが、&lt;br &#x2F;&gt;
やっぱNeovimの強みですね。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;133&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fast-cli&quot;&gt;fast-cli&lt;&#x2F;h3&gt;
&lt;p&gt;最後にちょっとした面白ツールを紹介します。&lt;br &#x2F;&gt;
非Rust製です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sindresorhus&#x2F;fast-cli&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これはCLIツールとしては、&lt;br &#x2F;&gt;
珍しくnpm経由でインストールするようです。&lt;br &#x2F;&gt;
(JavaScript製なので、当然っちゃ当然かもしれませんが)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;npm install --global fast-cli&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;npmを入れていない人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;typescript-build&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で環境構築について、&lt;br &#x2F;&gt;
解説しているので、よろしければご参考ください。[st-card myclass=&quot;st-no-shadow&quot; id=&quot;13&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;このツールは何かというと、&lt;br &#x2F;&gt;
光回線とか、ネットワークの速度を測るツールです。&lt;&#x2F;p&gt;
&lt;p&gt;いや&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fast.com&#x2F;ja&#x2F;&quot;&gt;ここ見れば&lt;&#x2F;a&gt;解決やんって野暮なことは言わないでください。&lt;&#x2F;p&gt;
&lt;p&gt;誰だって、CLIで実行したくなることはあるんですから。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Mac初期設定完全版】Webエンジニアが最初に導入するアプリや設定を公開</title>
        <published>2023-03-19T00:00:00+00:00</published>
        <updated>2023-11-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/mac-start/"/>
        <id>https://reisuta.com/mac-start/</id>
        
        <content type="html" xml:base="https://reisuta.com/mac-start/">&lt;h2 id=&quot;macbooknochu-qi-she-ding&quot;&gt;Macbookの初期設定&lt;&#x2F;h2&gt;
&lt;p&gt;Macbookを買ったり、初期化した際、&lt;br &#x2F;&gt;
デフォルトのままだと何かと使いにくいと思ったことは無いでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;下にうざいDockはあるし、&lt;br &#x2F;&gt;
カーソルはめっさ遅いし、&lt;br &#x2F;&gt;
変なアプリはたくさん入っているしと...&lt;&#x2F;p&gt;
&lt;p&gt;なので、インストールするべきアプリとか、&lt;br &#x2F;&gt;
やっておきたい設定とか色々あるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、お約束なのが、その設定を毎度忘れてしまうことです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;なので、今度こそ忘れても大丈夫なように&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;備忘録がてら、私の設定を公開しようと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Macを使う人は、よろしければ&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;insutorusuruapuri&quot;&gt;インストールするアプリ&lt;&#x2F;h2&gt;
&lt;p&gt;まずは、インストールするアプリを整理します。&lt;&#x2F;p&gt;
&lt;p&gt;インストールするアプリって、その人の好みがめちゃくちゃ出ますよね。&lt;br &#x2F;&gt;
私は、他人の設定とか、インストールしているアプリがめちゃくちゃ気になるタイプです。&lt;&#x2F;p&gt;
&lt;p&gt;以下は、私がインストールするアプリです。&lt;br &#x2F;&gt;
皆さんの環境と比べてみて、&lt;br &#x2F;&gt;
「俺だったらこれはインストールしない」とか&lt;br &#x2F;&gt;
「これも追加で入れる」とか色々あったら、&lt;br &#x2F;&gt;
&lt;mark&gt;X(旧Twitter)とか、コメントで教えてください。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ちなみに、私のX(旧Twitter)アカウントは下記になります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&quot;&gt;X (Twitter) のアカウントを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;burauza&quot;&gt;ブラウザ&lt;&#x2F;h3&gt;
&lt;p&gt;まず最初はブラウザです。&lt;&#x2F;p&gt;
&lt;p&gt;いきなり宗教戦争の香りがしてきましたね。&lt;&#x2F;p&gt;
&lt;p&gt;ブラウザは、その人の信条がはっきり出るので、&lt;br &#x2F;&gt;
私は他の人がどういうブラウザを使っているのか、&lt;br &#x2F;&gt;
聞いたりするのが結構好きです。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、そうはいいつつも、&lt;br &#x2F;&gt;
ストレージに余裕があるなら、&lt;br &#x2F;&gt;
&lt;strong&gt;有名どころのブラウザはインストールしておいても損はないでしょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアの場合、&lt;br &#x2F;&gt;
ブラウザの互換性とかをチェックしたりすることもありますからね。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Chrome&lt;&#x2F;li&gt;
&lt;li&gt;Edge&lt;&#x2F;li&gt;
&lt;li&gt;Firefox&lt;&#x2F;li&gt;
&lt;li&gt;Brave&lt;&#x2F;li&gt;
&lt;li&gt;Vivaldi&lt;&#x2F;li&gt;
&lt;li&gt;Sidekick&lt;&#x2F;li&gt;
&lt;li&gt;Opera&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;このあたりですかね？&lt;&#x2F;p&gt;
&lt;p&gt;皆さんは、どれを使っていますか？&lt;br &#x2F;&gt;
まさかChromeだなんてことは無いでしょうね？(煽るスタイル)&lt;&#x2F;p&gt;
&lt;p&gt;Chromeは、素晴らしいブラウザですが、&lt;br &#x2F;&gt;
個人的には、みんなが使っているというメリットしか無いと思います(異論は認める)&lt;&#x2F;p&gt;
&lt;p&gt;詳細は下記のYoutube動画でも&lt;br &#x2F;&gt;
語っているので、暇な人は観てやってください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;dlrbX2p0FWU&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;ブラウザは、宗教戦争になりやすいので、&lt;br &#x2F;&gt;
「こいつは何もわかってない。けしからん」と息巻いて、&lt;br &#x2F;&gt;
アンチコメントするのはやめてください。(なんだかんだで傷ついてますよ)&lt;br &#x2F;&gt;
温かい目で見守ってください。&lt;&#x2F;p&gt;
&lt;p&gt;さて、脱線しましたが、&lt;br &#x2F;&gt;
個人的には、厳選してインストールするなら、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Firefox&lt;&#x2F;li&gt;
&lt;li&gt;Vivaldi&lt;&#x2F;li&gt;
&lt;li&gt;Brave&lt;&#x2F;li&gt;
&lt;li&gt;Edge&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;の4つですかね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;firefox&quot;&gt;Firefox&lt;&#x2F;h4&gt;
&lt;p&gt;まず、Firefoxについては、&lt;br &#x2F;&gt;
昨今では、珍しい非Chromium製だということですかね。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、OSSというのも個人的には好きなのですが、&lt;br &#x2F;&gt;
&lt;mark&gt;Firefoxでしか使えない、アドオンのツリー型タブ&lt;&#x2F;mark&gt;というやつが、&lt;br &#x2F;&gt;
優秀すぎるというのもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;ja&#x2F;firefox&#x2F;addon&#x2F;tree-style-tab&#x2F;&quot;&gt;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;ja&#x2F;firefox&#x2F;addon&#x2F;tree-style-tab&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こいつは本当に優秀で、&lt;br &#x2F;&gt;
なんだかんだで他の縦型タブは、まだこいつを超えていないと思っています。&lt;&#x2F;p&gt;
&lt;p&gt;あと、地味にFirefoxは、jsonのアドオンとか入れなくても、&lt;br &#x2F;&gt;
いい感じにjsonを出力してくれるというメリットもあります。&lt;&#x2F;p&gt;
&lt;p&gt;デメリットとしては、良くも悪くも非Chromiumなので、&lt;br &#x2F;&gt;
微妙に勝手が違ったり、あとは一部サービスでは、&lt;br &#x2F;&gt;
対応されていなかったりという、ユーザー数が少ないことによる、&lt;br &#x2F;&gt;
デメリットは正直あります。&lt;&#x2F;p&gt;
&lt;p&gt;著名な例だと、&lt;br &#x2F;&gt;
PayPay銀行がサポート終了していましたね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.paypay-bank.co.jp&#x2F;news&#x2F;2022&#x2F;0307.html&quot;&gt;https:&#x2F;&#x2F;www.paypay-bank.co.jp&#x2F;news&#x2F;2022&#x2F;0307.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Firefoxが好きな私からしたら、&lt;br &#x2F;&gt;
なんともやりきれないニュースですが、&lt;br &#x2F;&gt;
これが現実なんですね...&lt;&#x2F;p&gt;
&lt;p&gt;一昔前であれば、&lt;br &#x2F;&gt;
メインブラウザはFirefoxでしたが、&lt;br &#x2F;&gt;
今だと、メインブラウザにするのはちょっと難しそうですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;vivaldi&quot;&gt;Vivaldi&lt;&#x2F;h4&gt;
&lt;p&gt;2つ目は、Vivaldiですね。&lt;&#x2F;p&gt;
&lt;p&gt;こいつは、そこまで有名なブラウザでもないですが、&lt;br &#x2F;&gt;
&lt;strong&gt;カスタマイズ製が非常に高いことで有名&lt;&#x2F;strong&gt;で、&lt;br &#x2F;&gt;
ありとあらゆるショットカットキーなどを設定できて、&lt;br &#x2F;&gt;
楽しいです。&lt;&#x2F;p&gt;
&lt;p&gt;私はメインブラウザにはしていませんが、&lt;br &#x2F;&gt;
今のメインブラウザに飽きたら、&lt;br &#x2F;&gt;
こちらに移行しようかなとぼんやり考えています。&lt;&#x2F;p&gt;
&lt;p&gt;デメリットとしては、あくまで私の感覚ベースでしかありませんが、&lt;br &#x2F;&gt;
ややもっさりしていたり、動作が重たい印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;今は改善されているのかもしれませんが、&lt;br &#x2F;&gt;
めちゃくちゃサクサク動くブラウザというわけではないかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;brave&quot;&gt;Brave&lt;&#x2F;h4&gt;
&lt;p&gt;3つ目は、Braveです。&lt;br &#x2F;&gt;
現在の私のメインブラウザです。&lt;&#x2F;p&gt;
&lt;p&gt;こいつの魅力は何と言っても、&lt;br &#x2F;&gt;
&lt;mark&gt;デフォルト広告ブロック&lt;&#x2F;mark&gt;にあり、&lt;br &#x2F;&gt;
adblookのような拡張機能が不要になることです。&lt;&#x2F;p&gt;
&lt;p&gt;また、&lt;strong&gt;広告を表示して、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;仮想通貨のBATを稼ぐこともできるブラウザ&lt;&#x2F;strong&gt;で、&lt;br &#x2F;&gt;
なんともわくわくさせてくれますよね。&lt;&#x2F;p&gt;
&lt;p&gt;ちょっと前までは、これ以外は対してメリットがなかったのですが、&lt;br &#x2F;&gt;
&lt;mark&gt;最近、縦型タブに対応しました。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この縦型タブは、Firefoxのツリー型タブほどの機能性はありませんが、&lt;br &#x2F;&gt;
Chromeの拡張機能にあるような、縦型タブとかよりは、&lt;br &#x2F;&gt;
何百倍も実用的で使いやすい、素晴らしいものでした。&lt;&#x2F;p&gt;
&lt;p&gt;私はこれが搭載された、迷わずメインブラウザにしました。&lt;&#x2F;p&gt;
&lt;p&gt;縦型タブがある前は、Edgeをメインブラウザにしていましたが、&lt;br &#x2F;&gt;
Braveにも縦型タブがある以上、Edgeのメリットは霞んでしまったので、&lt;br &#x2F;&gt;
Braveをメインブラウザに移行しましたね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;edge&quot;&gt;Edge&lt;&#x2F;h4&gt;
&lt;p&gt;Edgeの縦型タブも大変優秀で使いやすいです。&lt;&#x2F;p&gt;
&lt;p&gt;Braveのデメリットは、&lt;br &#x2F;&gt;
たまに広告ブロックが強すぎて、&lt;br &#x2F;&gt;
サイトの挙動を変えてしまったりする点ですね。&lt;&#x2F;p&gt;
&lt;p&gt;最近だと、Amazonとかの挙動が相性悪く、&lt;br &#x2F;&gt;
カートに商品を追加する機能で、&lt;br &#x2F;&gt;
だいたいエラーが起きます。&lt;&#x2F;p&gt;
&lt;p&gt;こういうときは、Edgeに頼っています。&lt;&#x2F;p&gt;
&lt;p&gt;私の場合、&lt;br &#x2F;&gt;
メインブラウザはBrave、&lt;br &#x2F;&gt;
サブブラウザはEdgeという感じで運用しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Edgeは、Chromeに匹敵するぐらいユーザー数が多いという&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;絶大なメリットがあるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;サポートされていないということは基本無いという安心感があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kai-fa-xi&quot;&gt;開発系&lt;&#x2F;h3&gt;
&lt;p&gt;次に、開発系のツールをご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;ターミナルや、VimとかTmuxといった、&lt;br &#x2F;&gt;
Cliツールなど、エンジニアの仕事道具ですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;iterm2&quot;&gt;iTerm2&lt;&#x2F;h4&gt;
&lt;p&gt;エンジニアがまず初めに入れるアプリは、&lt;br &#x2F;&gt;
やはりターミナルでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Macだったら、iTerm2で良いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ターミナルの比較考察とか、&lt;br &#x2F;&gt;
おすすめは下記の記事でも紹介しているので、&lt;br &#x2F;&gt;
ターミナルにこだわりたい人は、下記の記事もご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;iTerm2で、やっておきたい設定があります。&lt;br &#x2F;&gt;
まずは、&lt;strong&gt;Hotkey&lt;&#x2F;strong&gt;の設定です。&lt;&#x2F;p&gt;
&lt;p&gt;PreferencesのKeysのHotkeyで、&lt;br &#x2F;&gt;
Show&#x2F;hide all windows with a system-wide hotkeyで、&lt;br &#x2F;&gt;
好きなキーを設定できます。&lt;&#x2F;p&gt;
&lt;p&gt;私はいつも、Ctrl + ; に設定しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;Screen-Shot-2023-03-19-at-13.38.59-1024x325.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これ以外と、&lt;br &#x2F;&gt;
普通じゃんって思われるかもしれませんが、&lt;br &#x2F;&gt;
意外と他のターミナルって、この機能サポートしていないんですよね...&lt;&#x2F;p&gt;
&lt;p&gt;仮にサポートしていても、&lt;br &#x2F;&gt;
うまく呼び出せなかったり、&lt;br &#x2F;&gt;
出現する感じが微妙だったりで、&lt;br &#x2F;&gt;
なかなかiTerm2ほどストレスなく表示・非表示を切り替えられるターミナルは、&lt;br &#x2F;&gt;
多くない印象です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、Macを使うなら、&lt;br &#x2F;&gt;
なんだかんだでiTerm2がベストなんじゃないかなと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;dockerdesukutotuputoorbstack&quot;&gt;DockerデスクトップとOrbStack&lt;&#x2F;h4&gt;
&lt;p&gt;お次は、Docker関係ですね。&lt;&#x2F;p&gt;
&lt;p&gt;こちらも言わずもがな。&lt;br &#x2F;&gt;
インストールしたくなくてもインストールさせられるし、&lt;br &#x2F;&gt;
実際必要なアプリでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、最近はDockerデスクトップよりも、&lt;br &#x2F;&gt;
&lt;mark&gt;OrbStackのようなDockerデスクトップの代替アプリ&lt;&#x2F;mark&gt;のようなものもあるので、&lt;br &#x2F;&gt;
もしかすると、こちらの方がいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;orbstack.dev&#x2F;&quot;&gt;https:&#x2F;&#x2F;orbstack.dev&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Dockerデスクトップは、&lt;br &#x2F;&gt;
なんだかんだで重かったり、もっさりしていたり、&lt;br &#x2F;&gt;
クラッシュすることもあるので、&lt;br &#x2F;&gt;
結構restartすることも多いんですよね。&lt;&#x2F;p&gt;
&lt;p&gt;もしかすると、今後はDockerデスクトップは&lt;br &#x2F;&gt;
廃れていってOrbStackのようなもののほうが、&lt;br &#x2F;&gt;
主流になっていくかもしれませんね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cliapuri&quot;&gt;CLIアプリ&lt;&#x2F;h3&gt;
&lt;p&gt;次は、CLIアプリです。&lt;&#x2F;p&gt;
&lt;p&gt;私のブログにも、CLIツールというものがあるように、&lt;br &#x2F;&gt;
この領域でも最初にインストールしたものはたくさんあるので、&lt;br &#x2F;&gt;
順に紹介していきたいと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;homebrew&quot;&gt;Homebrew&lt;&#x2F;h4&gt;
&lt;p&gt;これを入れないと何も始まりません。&lt;br &#x2F;&gt;
MacやLinuxのパッケージマネージャーです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;brew.sh&quot;&gt;https:&#x2F;&#x2F;brew.sh&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のサイトにあるコマンドを実行すれば、&lt;br &#x2F;&gt;
インストールできるはずです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -fsSL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;Homebrew&#x2F;install&#x2F;HEAD&#x2F;install.sh)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで、brew install neovimとかみたいな&lt;br &#x2F;&gt;
コマンドが使えるようになりますね。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、M1とかの場合、ターミナルを開く際に、&lt;br &#x2F;&gt;
get infoからRosettaを開くを有効にする必要があるようです。&lt;&#x2F;p&gt;
&lt;p&gt;相変わらずめんどくさいM系チップですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;Screen-Shot-2023-03-19-at-14.28.16.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;vimyaneovim&quot;&gt;VimやNeovim&lt;&#x2F;h4&gt;
&lt;p&gt;もちろん、いれますね。&lt;br &#x2F;&gt;
&lt;mark&gt;私のブログやYoutubeでは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;VimやNeovimの動画をたくさんあげているので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;もちろん、これらも環境構築します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vimのインストールは、&lt;br &#x2F;&gt;
こちらの記事で紹介しているので、&lt;br &#x2F;&gt;
詳しくはこちらをご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;Vimの設定ファイルの、&lt;br &#x2F;&gt;
設定例は、こちらの記事が参考になるかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;172&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tmux&quot;&gt;Tmux&lt;&#x2F;h4&gt;
&lt;p&gt;これも個人的には必須のアプリです。&lt;br &#x2F;&gt;
詳しくは下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;143&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h4 id=&quot;oh-my-zsh&quot;&gt;oh-my-zsh&lt;&#x2F;h4&gt;
&lt;p&gt;まあ、これは入れなくても&lt;br &#x2F;&gt;
いいかもしれないが、個人的には割と入れたいやつです。&lt;&#x2F;p&gt;
&lt;p&gt;シェルを見やすくいい感じにしてくれます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ohmyz.sh&#x2F;#install&quot;&gt;https:&#x2F;&#x2F;ohmyz.sh&#x2F;#install&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -fsSL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;ohmyzsh&#x2F;ohmyzsh&#x2F;master&#x2F;tools&#x2F;install.sh)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;公式にある、上記のようなコマンドを実行すれば&lt;br &#x2F;&gt;
インストールできます。&lt;br &#x2F;&gt;
.zshrcファイルが書き換わるので、&lt;br &#x2F;&gt;
.zshrcファイルの編集をする前に、&lt;br &#x2F;&gt;
インストールするのがおすすめ。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;git&quot;&gt;Git&lt;&#x2F;h4&gt;
&lt;p&gt;これも必須ですね。&lt;&#x2F;p&gt;
&lt;p&gt;MacとかLinuxはGitは最初から入っているだろうから、&lt;br &#x2F;&gt;
インストールはしなくてもいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、ssh設定から行います。&lt;&#x2F;p&gt;
&lt;p&gt;詳細はこちらの記事を御覧ください。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&#x2F;items&#x2F;e5dd787bc43b79e1a51b&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&#x2F;items&#x2F;e5dd787bc43b79e1a51b&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Git自体の使い方は、下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;179&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h4 id=&quot;zoxide&quot;&gt;Zoxide&lt;&#x2F;h4&gt;
&lt;p&gt;これは、cdの上位互換コマンドで、&lt;br &#x2F;&gt;
ディレクトリ間の行き来を楽にしてくれます。&lt;&#x2F;p&gt;
&lt;p&gt;このような便利コマンドについては、&lt;br &#x2F;&gt;
下記の記事で詳しく解説しているので、&lt;br &#x2F;&gt;
こちらをご参考ください&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;156&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dong-hua-bian-ji-xi&quot;&gt;動画編集系&lt;&#x2F;h3&gt;
&lt;p&gt;お次は動画編集系をご紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;エンジニアとしては、必須ではありませんが、&lt;br &#x2F;&gt;
私のようにYoutubeもやっている人は、&lt;br &#x2F;&gt;
必要になってきます。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトでインストールされている、&lt;br &#x2F;&gt;
iMovieも使いやすいことは使いやすいですが、&lt;br &#x2F;&gt;
やたらとストレージを食うので、&lt;br &#x2F;&gt;
長期的に使うには向いていないです。&lt;&#x2F;p&gt;
&lt;p&gt;また、編集自体も簡単なものしかできません。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;davinci-resolve&quot;&gt;DaVinci Resolve&lt;&#x2F;h4&gt;
&lt;p&gt;既に少し触れましたが、MacだとiMovieというそこそこ使えるアプリが入っています。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、Macでしか使えないという点は、Windowsとかに移行するときのネックになるので、&lt;br &#x2F;&gt;
できればクロスプラットフォーム対応のものを使いたいなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;仮にiMovieがめちゃくちゃ優秀なアプリなら、&lt;br &#x2F;&gt;
使う理由はあると思いますが、&lt;br &#x2F;&gt;
iMovieは、クロスプラットフォーム対応を犠牲にしてまで優秀なアプリとは&lt;br &#x2F;&gt;
言い難いかなと思います。（個人的には）&lt;&#x2F;p&gt;
&lt;p&gt;そこで、&lt;strong&gt;DaVinci Resolveが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;個人的には良いなと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、クロスプラットフォームだということと、&lt;br &#x2F;&gt;
基本的に無料で使用できること、&lt;br &#x2F;&gt;
プロの現場でも使用されており、&lt;br &#x2F;&gt;
クオリティーの高い編集が可能なことなど、&lt;br &#x2F;&gt;
様々なメリットがあります。&lt;&#x2F;p&gt;
&lt;p&gt;動画編集系では、まっさきにインストールします。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;obs-studio&quot;&gt;OBS Studio&lt;&#x2F;h4&gt;
&lt;p&gt;こちらは、録画アプリで、&lt;br &#x2F;&gt;
個人的には使いやすいなと感じています。&lt;&#x2F;p&gt;
&lt;p&gt;私も、Youtube動画を作るときは、&lt;br &#x2F;&gt;
OBS Studioを使っています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ye-wu-xiao-lu-hua-xi&quot;&gt;業務効率化系&lt;&#x2F;h3&gt;
&lt;p&gt;次に業務効率化系のアプリを紹介したいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;あんまり、エンジニアだからっていうアプリは少ないですが、&lt;br &#x2F;&gt;
こういうアプリの便利さも結構馬鹿にできません。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;rectangle&quot;&gt;Rectangle&lt;&#x2F;h4&gt;
&lt;p&gt;Windowsとかだと、&lt;br &#x2F;&gt;
何もしなくても、Windowsキー + 矢印キーで、&lt;br &#x2F;&gt;
画面を最大化したり左右に分けたりできるが、&lt;br &#x2F;&gt;
Macだとできないんですよね。&lt;&#x2F;p&gt;
&lt;p&gt;なので、できるようにするために、&lt;br &#x2F;&gt;
&lt;strong&gt;Rectangle&lt;&#x2F;strong&gt;というアプリを入れると解決します。&lt;&#x2F;p&gt;
&lt;p&gt;これは、Ctrl + Enterとかで画面を最大化したり、&lt;br &#x2F;&gt;
commadn + shift + →で右によせたりといった操作が簡単にできるようになるので、&lt;br &#x2F;&gt;
地味に便利ですし、私はこれがないと困ります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;alfred&quot;&gt;Alfred&lt;&#x2F;h4&gt;
&lt;p&gt;有名ですね。そして、これも必須ですね。&lt;br &#x2F;&gt;
&lt;strong&gt;Macを使っていてAlfredを入れていない人は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;全員入れてほしいレベルで、優秀なアプリです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Alfredをつかっていない人は、&lt;br &#x2F;&gt;
人生損していると言っても過言ではありません(異論は認めません)&lt;&#x2F;p&gt;
&lt;p&gt;Macのデフォルトのランチャーアプリは、&lt;br &#x2F;&gt;
Spotlightですが、物足りません。&lt;&#x2F;p&gt;
&lt;p&gt;Spotlightで頑張れないこともないですが、&lt;br &#x2F;&gt;
Alfredと比べたら、コイキングとレックウザぐらい違います。&lt;&#x2F;p&gt;
&lt;p&gt;Alfredの魅力は、iTerm2のようなホットキーでいつでもランチャーを呼び出して、&lt;br &#x2F;&gt;
アプリを開くのはもちろん、クリップボード(有料)、&lt;br &#x2F;&gt;
PC制御(sleepなど)、ブックマーク検索など、&lt;br &#x2F;&gt;
様々な機能があります。&lt;&#x2F;p&gt;
&lt;p&gt;正直私もすべての機能を使いこなせているわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;やはり、Macを使うのであれば、&lt;br &#x2F;&gt;
&lt;strong&gt;Alfred&lt;&#x2F;strong&gt;という偉大なアプリを使わなければもったいないと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;karabiner-elements&quot;&gt;Karabiner-Elements&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;mark&gt;あの宇宙一鬱陶しいキー&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Caps lockを野放しにするわけにはいきません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;Caps lockを追放するために、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;我々は今、立ち上がらなければなりません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;その際、役に立つのが、このアプリです。&lt;br &#x2F;&gt;
Karabiner-Elementsです。&lt;&#x2F;p&gt;
&lt;p&gt;これで、好きなキーに変更できます。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトだと、&lt;br &#x2F;&gt;
プライバシー設定とかを色々許可してあげないと有効にならないので、&lt;br &#x2F;&gt;
許可してあげましょう。&lt;&#x2F;p&gt;
&lt;p&gt;それにしても、&lt;br &#x2F;&gt;
Caps lockって誰得なんでしょう。&lt;br &#x2F;&gt;
使う人いるんでしょうか。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;macnoshe-ding&quot;&gt;Macの設定&lt;&#x2F;h2&gt;
&lt;p&gt;次は、Macの設定周りに移って行きたいと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;toratukupatudo&quot;&gt;トラックパッド&lt;&#x2F;h3&gt;
&lt;p&gt;とりあえず、トラッキングスピードはMaxにします。&lt;br &#x2F;&gt;
デフォルトのスピードは、お前やる気あんのか？っていうぐらい&lt;br &#x2F;&gt;
遅いのでやってられません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;Screen-Shot-2023-03-19-at-13.18.47.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dock&quot;&gt;Dock&lt;&#x2F;h3&gt;
&lt;p&gt;Macのデフォルトだと、&lt;br &#x2F;&gt;
あの宇宙一鬱陶しいDockがついてきます。&lt;&#x2F;p&gt;
&lt;p&gt;Dockが下に並んでいると、&lt;br &#x2F;&gt;
「俺Mac使っているぜ」感出ますが、&lt;br &#x2F;&gt;
そんな幼い時代は、もう私は卒業しました。&lt;&#x2F;p&gt;
&lt;p&gt;Dockがあっても殺意がわくだけです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;Screen-Shot-2023-03-19-at-13.45.45-1024x634.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Dockほんといらない&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Macの仕様では、&lt;br &#x2F;&gt;
このDockを無効化すること自体は&lt;br &#x2F;&gt;
できないみたいです。（誰得なのこれ？）&lt;&#x2F;p&gt;
&lt;p&gt;なので、できるだけ表示させないようにします。&lt;&#x2F;p&gt;
&lt;p&gt;Sizeを一番小さくし、&lt;br &#x2F;&gt;
Automatically hide and show the Dockを有効にします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;mac-start&#x2F;Screen-Shot-2023-03-19-at-13.49.14-1024x839.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sukurinsiyotutoguan-xi&quot;&gt;スクリーンショット関係&lt;&#x2F;h3&gt;
&lt;p&gt;次にスクリーンショット関係の設定をいじります。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;bao-cun-xian-wobian-eru&quot;&gt;保存先を変える&lt;&#x2F;h4&gt;
&lt;p&gt;GUIの場合、&lt;br &#x2F;&gt;
cmd + shift + 5でスクリーンショットを起動し、&lt;br &#x2F;&gt;
optionsから、保存先を変えることができます。&lt;&#x2F;p&gt;
&lt;p&gt;ターミナルでやる場合、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;defaults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; write com.apple.screencapture location &#x2F;保存先のパス&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;macだと、上記のような、&lt;br &#x2F;&gt;
defaults writeコマンドがあるので、&lt;br &#x2F;&gt;
これの使い方を学ぶのも面白いかもしれません。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;chu-li-huairuming-wobian-eru&quot;&gt;出力ファイル名を変える&lt;&#x2F;h4&gt;
&lt;p&gt;デフォルトだと、余計なスペースとかが入って、&lt;br &#x2F;&gt;
鬱陶しいのでできれば、ファイル名も変えたいですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;defaults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; write com.apple.screencapture name 保存したい名前&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで変更できます。&lt;&#x2F;p&gt;
&lt;p&gt;ただこれだけだと、日付が入るので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;defaults&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; write com.apple.screencapture &amp;quot;include-date&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で日付を消します。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby on Rails概念思想】 使い方やコマンド・Gemチートシート</title>
        <published>2023-03-16T00:00:00+00:00</published>
        <updated>2023-09-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/matome/"/>
        <id>https://reisuta.com/matome/</id>
        
        <content type="html" xml:base="https://reisuta.com/matome/">&lt;h2 id=&quot;railsnogai-nian-si-xiang&quot;&gt;Railsの概念思想&lt;&#x2F;h2&gt;
&lt;p&gt;Ruby on Railsに限らず、&lt;br &#x2F;&gt;
技術には何らかの思想があることがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;特にRailsはその中でも&lt;br &#x2F;&gt;
その傾向が強く、&lt;br &#x2F;&gt;
&lt;mark&gt;いわゆるRails wayを遵守しないと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;なかなかRailsのパワーを引き出せません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;以下、Railsの概念思想を解説します。&lt;&#x2F;p&gt;
&lt;p&gt;本記事は、どちらかというと、&lt;br &#x2F;&gt;
Railsまとめのような記事なので、&lt;br &#x2F;&gt;
具体的なRailsの環境構築などは、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;rails-new&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt; を参照ください。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mvc&quot;&gt;MVC&lt;&#x2F;h3&gt;
&lt;p&gt;Railsの概念でもっとも重要なものといえば、&lt;br &#x2F;&gt;
やはりMVCでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;MVCは、Rails専門の概念というわけではなく、&lt;br &#x2F;&gt;
例えばLaravelとかもたしかMVCだったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;MVCもがちで学ぶと結構複雑で、&lt;br &#x2F;&gt;
奥が深いのですが、とりあえず、&lt;br &#x2F;&gt;
Railsを使うだけなら細かいことは気にしなくても大丈夫かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;平たく言うと、&lt;mark&gt;&lt;strong&gt;Model View Controllerの三つがあって、&lt;br &#x2F;&gt;
アプリケーションの責務をこの三つに分割しているのがMVCの概要です。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;よくRailsのMVCの説明で、&lt;br &#x2F;&gt;
「モデルを介して、ビューにわたされて」みたいな&lt;br &#x2F;&gt;
それっぽい理屈を聞かされるかもしれませんが、&lt;br &#x2F;&gt;
&lt;strong&gt;正直私は初学者のときに、こんなことを言われても&lt;br &#x2F;&gt;
混乱しただけでした。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;少なくとも、とりあえず、Railsを使えるようになるレベルであれば、&lt;br &#x2F;&gt;
MVCの深い理解はなくてもいいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;重要な流れは、&lt;br &#x2F;&gt;
&lt;strong&gt;Controller → Viewにあるかなと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、Controllerで必ずModelの呼び出しをするとは限らないので、&lt;br &#x2F;&gt;
MVCの説明であたかもController層で必ずModelを経由するみたいな説明は混乱を招く気がします。&lt;br &#x2F;&gt;
（私がそうでした）&lt;&#x2F;p&gt;
&lt;p&gt;それにMVCは、責務の分割、保守性の向上のための、&lt;br &#x2F;&gt;
アーキテクチャーであり、流れを教科書的に、&lt;br &#x2F;&gt;
定義するものでもない気がするので、上記のような説明でも&lt;br &#x2F;&gt;
そこまで外れていないかなと思っています。&lt;br &#x2F;&gt;
(MVCガチ勢の人からすると「ちげえよ」って感じかもしれませんが)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;matome&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Railsを使うにあたって、最低限抑えたい事項は、&lt;br &#x2F;&gt;
&lt;strong&gt;Routingを張ったエンドポイントに対し、&lt;br &#x2F;&gt;
Controllerのメソッドが呼ばれ、そのメソッドの行き先が、&lt;br &#x2F;&gt;
同じディレクトリのviews配下に進んでいくということだけです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;よくRailsは覚えゲーって言われますが、&lt;br &#x2F;&gt;
確かにこのあたりは割と覚えゲーですかね。&lt;&#x2F;p&gt;
&lt;p&gt;モデルうんたらは、考えなくても、&lt;br &#x2F;&gt;
要は、Controllerでの処理でModelの呼び出しをしているだけで、&lt;br &#x2F;&gt;
上記の流れに、かならずModelの経由が組み込まれるととらえるのは、&lt;br &#x2F;&gt;
どうも逆に素直じゃない気がするなと個人的には感じます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、MVCの詳細は、&lt;br &#x2F;&gt;
下記のドキュメントに記載があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;getting_started.html#mvc%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B&quot;&gt;https:&#x2F;&#x2F;railsguides.jp&#x2F;getting_started.html#mvc%E3%82%92%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;モデルは、DBの疎通を担当し、&lt;br &#x2F;&gt;
Viewは、画面の見た目を担当し、&lt;br &#x2F;&gt;
Controllerは、両者の仲介をするという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、DBのデータをViewにまで&lt;br &#x2F;&gt;
渡す一連の流れみたいな感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;本来のRailsであれば、&lt;br &#x2F;&gt;
こんな感じですが、&lt;br &#x2F;&gt;
最近は、Rails + ReactみたいなSPA開発が主流なので、&lt;br &#x2F;&gt;
Railsがビューを担当するということは少なくなっています。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、それでもRailsのビューは、&lt;br &#x2F;&gt;
フロント(Reactなど)にわたすJsonを定義するので、&lt;br &#x2F;&gt;
そういう意味では、MVCになってはいると思いますが。&lt;&#x2F;p&gt;
&lt;p&gt;以下、用語について、&lt;br &#x2F;&gt;
詳しくみていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;model&quot;&gt;model&lt;&#x2F;h3&gt;
&lt;p&gt;MVCのところで、&lt;br &#x2F;&gt;
modelについてちょっと軽視するような説明をしましたが、&lt;br &#x2F;&gt;
model自体は、Railsにおいて重要な概念です。&lt;&#x2F;p&gt;
&lt;p&gt;modelとは何ぞ？って感じだと思いますが、&lt;br &#x2F;&gt;
面倒くさいことは考えなくて大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;要は、DBのテーブルです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
（厳密には違うのですが、最低限Railsを使うだけならこの理解でも十分でしょう。）&lt;&#x2F;p&gt;
&lt;p&gt;まあ、Rails特製の、便利なDBテーブルとでも&lt;br &#x2F;&gt;
思ってくれれば大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;事実、Controllerとかの処理では、&lt;br &#x2F;&gt;
このModelを使ってDBにアクセスをします。&lt;br &#x2F;&gt;
つまり、&lt;mark&gt;面倒くさいSQLを書かなくても、DBと会話してくれる、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;便利な通訳みたいな役割をしてるのが、このmodelというわけです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これが便利すぎて、SQLをかけなくなる、&lt;br &#x2F;&gt;
事象が多発しているので、気をつけたいところですね。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、こういったORMは、&lt;br &#x2F;&gt;
Rails以外にもあるので、&lt;br &#x2F;&gt;
特段Railsの強みというわけではありませんが。&lt;br &#x2F;&gt;
(そうはいっても、Railsのモデルがわかりやすく使いやすいのは事実です)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;migration&quot;&gt;migration&lt;&#x2F;h3&gt;
&lt;p&gt;次によく聞く用語として、&lt;br &#x2F;&gt;
migrationがあります。&lt;&#x2F;p&gt;
&lt;p&gt;migrationは、ほかのフレームワークでも聞くかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;LaravelやPrismaとかでも、&lt;br &#x2F;&gt;
migrationコマンドがあったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これは平たく言うと、&lt;br &#x2F;&gt;
&lt;mark&gt;migrationファイルという、DBの設計書というか、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;「こんな感じのテーブルつくりたいんだけど」みたいな、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;設計を定義したファイルを実際にDBに反映させることをいいます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;DBにテーブルおを作る方法として、&lt;br &#x2F;&gt;
いきなりSQLでcreate tableとかでも&lt;br &#x2F;&gt;
作れないわけでも有りませんが、&lt;br &#x2F;&gt;
メンテナンス性にかけますし、&lt;br &#x2F;&gt;
いきなり本番実行はtypoなどのリスクも大きいです。&lt;&#x2F;p&gt;
&lt;p&gt;そこでいきなり作る前に、&lt;br &#x2F;&gt;
確認するフェーズみたいなものを挟めたら理想だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それが、migrationにあたりまして、&lt;strong&gt;DBにテーブルとかを作る前に、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;設計書を作って、反映させるというワンクッションを置いた感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;migrationは、歴史の側面もあります。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;というのも、migraitonファイルを生成して積み重ねていけば、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;過去にどういうテーブルを作ったり修正したのかということが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;migrationファイルを見ればわかるからです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Gitの歴史に通ずる部分がありますね。&lt;br &#x2F;&gt;
Git管理下に置けば、メンテナンス性は上がりますが、&lt;br &#x2F;&gt;
管理下から外せば、どのタイミングで編集されたりとか、&lt;br &#x2F;&gt;
過去の設定に戻したいとかがやりづらくなってしまいますよね。&lt;&#x2F;p&gt;
&lt;p&gt;migrationは、このGitのように、&lt;br &#x2F;&gt;
DBテーブルの作成・修正の歴史を積み上げていくような側面もあるというわけです。&lt;&#x2F;p&gt;
&lt;p&gt;それにmigrationのメリットは、ロールバックのように、&lt;br &#x2F;&gt;
migrationを反映する前に戻すこともできるということで、&lt;br &#x2F;&gt;
DBの構造を歴史をさかのぼるようにして変えることができます。&lt;&#x2F;p&gt;
&lt;p&gt;この点も、Gitに似ていますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ruteingu&quot;&gt;ルーティング&lt;&#x2F;h3&gt;
&lt;p&gt;次の用語は、ルーティングです。&lt;&#x2F;p&gt;
&lt;p&gt;ルーティングも、ほかのフレームワークとかでも&lt;br &#x2F;&gt;
普通に登場する言葉で、Railsでの意味も大して変わりません。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、Railsの場合、config&#x2F;routes.rbに、&lt;br &#x2F;&gt;
エンドポイントを設定して、呼ばれるControllerの処理を指定します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;イメージとしては、蜘蛛の巣を張り巡らす感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Railsを使いたてのころ、&lt;br &#x2F;&gt;
私はルーティングは、なんとなく、&lt;br &#x2F;&gt;
resourcesで指定して、controllerに行って、&lt;br &#x2F;&gt;
viewに行ってみたいな感じで、&lt;br &#x2F;&gt;
機械的に覚えていました。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、これはこれで間違えでもない気もしますが、&lt;br &#x2F;&gt;
ルーティングは、基本的には結構自由です。&lt;br &#x2F;&gt;
（できればresourcesを使いたいが）&lt;&#x2F;p&gt;
&lt;p&gt;そして、呼ばせるControllerをルーティングで指定し、&lt;br &#x2F;&gt;
Controllerのメソッドで処理を書いていくことは、&lt;br &#x2F;&gt;
あたかも、用意した蜘蛛の巣（メソッド）に、&lt;br &#x2F;&gt;
誘い込む（ルーティングのエンドポイントにアクセスさせる）みたいな&lt;br &#x2F;&gt;
イメージのような気がしています。&lt;&#x2F;p&gt;
&lt;p&gt;私は、ファイルエクスポートとか、インポートの処理を、&lt;br &#x2F;&gt;
ルーティングで指定しているのをみて、&lt;br &#x2F;&gt;
ルーティングの意味が腑に落ちました。&lt;&#x2F;p&gt;
&lt;p&gt;ドキュメントのページは下記ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;routing.html&quot;&gt;https:&#x2F;&#x2F;railsguides.jp&#x2F;routing.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ルーティングも好き勝手やっていいということはなく、&lt;br &#x2F;&gt;
やはり適切なapi設計というものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これは、Railsというよりは、&lt;br &#x2F;&gt;
API設計の話になると思うので、&lt;br &#x2F;&gt;
割愛します。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、私が以前経験したプロジェクトでは、&lt;br &#x2F;&gt;
ルーティングが、config&#x2F;routes.rbにまとまっておらず、&lt;br &#x2F;&gt;
別ファイルとかに個別に定義されていれ、&lt;br &#x2F;&gt;
DockerのNginx経由でルーティングの上書きのようなことが行われていて、&lt;br &#x2F;&gt;
控えめに言って地獄でした。&lt;&#x2F;p&gt;
&lt;p&gt;Rails wayを軽んじて好き勝手やり始めると、&lt;br &#x2F;&gt;
一気に負債化するので、Railsを採用するからには、&lt;br &#x2F;&gt;
しっかり道をあるきましょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;railsnogem&quot;&gt;RailsのGem&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Ruby on Railsにおける、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;外部ライブラリをGemと呼びます&lt;&#x2F;strong&gt;が、&lt;br &#x2F;&gt;
Railsは、割と何をするにも、&lt;br &#x2F;&gt;
Gemに頼る文化？みたいなものがある気がしています。&lt;&#x2F;p&gt;
&lt;p&gt;その中には、外部ライブラリだけど、&lt;br &#x2F;&gt;
実質標準ライブラリでしょっていうぐらい毎回使うものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、そういったGemなどについてまとめてみようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Railsもgemです。&lt;br &#x2F;&gt;
Ruby on Railsを使う時点で、&lt;br &#x2F;&gt;
使いますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hodondomei-hui-shi-ugem&quot;&gt;ほどんど毎回使うGem&lt;&#x2F;h3&gt;
&lt;p&gt;まずは、スタメンを紹介しましょう。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;rucocop&lt;&#x2F;td&gt;&lt;td&gt;Lintツール&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rspec&lt;&#x2F;td&gt;&lt;td&gt;テストツール。minitest派もいるだろうが、なんだかんだrspecのほうが使われている気がするし使いやすい。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;byebug&lt;&#x2F;td&gt;&lt;td&gt;デバッグツール。pry-railsとかでもいい。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;factory_bot_rails&lt;&#x2F;td&gt;&lt;td&gt;テスト時のダミーデータを作成してくれる。rspecとハッピーセット&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;&lt;em&gt;※railsやDBやアプリケーションサーバーのgemみたいにデフォルトで入っているやつは除外してます。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、これ以外にもスタメンチックなgemはあるのですが、&lt;br &#x2F;&gt;
明示的にそのGemの機能を使うというよりは、&lt;br &#x2F;&gt;
Railsの仕組みのために使われていて、&lt;br &#x2F;&gt;
Rails wayに乗っかれば、そこは隠蔽されるみたいなGemも多い気がするので、&lt;br &#x2F;&gt;
そういうのは省略しています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chang-he-niyotuteshi-uji-hui-gaduo-ionaziminogem&quot;&gt;場合によって使う機会が多いおなじみのGem&lt;&#x2F;h3&gt;
&lt;p&gt;次にベンチ入りメンバーを紹介しましょう。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;ransack&lt;&#x2F;td&gt;&lt;td&gt;検索機能を簡単に作れるGem。検索機能が必要な際は、ransackを入れるかどうかを検討することがほどんど。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;kaminari&lt;&#x2F;td&gt;&lt;td&gt;ページネーションを簡単に作れるGem。こちらもページネーションと聞いたらまっさきに思い浮かぶGem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;jbuilder&lt;&#x2F;td&gt;&lt;td&gt;view層でjsonを返す、主にAPIとして使用するときに必須になるGem。一応jbuiler以外にも、代わりとなるgemはたくさんあるが、知名度はこいつが圧倒的&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;dotenv-raiils&lt;&#x2F;td&gt;&lt;td&gt;環境変数を使うときは、使うことを検討するgem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;capistrano&lt;&#x2F;td&gt;&lt;td&gt;デプロイするときにお世話になるgem。Railsデプロイのデファクトはこいつなので、事実上、毎回使うかもしれない。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;whenever&lt;&#x2F;td&gt;&lt;td&gt;cron機能を使いたいときに使うgem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;sidekiq&lt;&#x2F;td&gt;&lt;td&gt;こいつは実務だったらスタメン。個人開発ならベンチ入りメンバーというところでしょうか。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;redis&lt;&#x2F;td&gt;&lt;td&gt;sidekiqと一緒に使われることが多いgem。使っている企業は多そうだが、使っていない企業も多そう&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;enum_help&lt;&#x2F;td&gt;&lt;td&gt;enumを使う際は入れることが多いと思う&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;cancancan&lt;&#x2F;td&gt;&lt;td&gt;権限管理系では、割と有名かと&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;carrierwave&lt;&#x2F;td&gt;&lt;td&gt;ファイルアップロード系は俺にまかせろっていう感じのgem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;これ以外にもあると思いますが、&lt;br &#x2F;&gt;
ぱっと思いつくのはこのあたりですかね。&lt;&#x2F;p&gt;
&lt;p&gt;テストでよく使うgemとか、&lt;br &#x2F;&gt;
Google apiのgemとかも場合によっては、&lt;br &#x2F;&gt;
かなり使用頻度高い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;Railsの場合、ページネーションや検索機能なども&lt;br &#x2F;&gt;
gemで実装したりすることが多いのが印象的ですね。&lt;&#x2F;p&gt;
&lt;p&gt;PHPとかだと、このあたりの機能は、&lt;br &#x2F;&gt;
自分で書いていたような気がします。&lt;&#x2F;p&gt;
&lt;p&gt;基本的にライブラリのコントリビューターの方は、&lt;br &#x2F;&gt;
優秀なエンジニアばかりなので、&lt;br &#x2F;&gt;
その方たちにメンテナンスされているのであれば、&lt;br &#x2F;&gt;
自分で書くよりも絶対に良いですね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、更新が止まっていたり、&lt;br &#x2F;&gt;
自分で書き換えたりする場合は、&lt;br &#x2F;&gt;
そのライブラリのコードが読めないといけないので、&lt;br &#x2F;&gt;
大変になる場合もありますが。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;railskomando&quot;&gt;Railsコマンド&lt;&#x2F;h2&gt;
&lt;p&gt;Ruby on Railsはフルスタックフレームワークなので、&lt;br &#x2F;&gt;
コマンドなども色々あります。&lt;&#x2F;p&gt;
&lt;p&gt;そして、そのようなコマンドの中でも、&lt;br &#x2F;&gt;
よく使うやつとそうでもないやつなど、&lt;br &#x2F;&gt;
色々あります。&lt;&#x2F;p&gt;
&lt;p&gt;ここでは、よく使うやつをご紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yokushi-ukomando&quot;&gt;よく使うコマンド&lt;&#x2F;h3&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;rails c&lt;&#x2F;td&gt;&lt;td&gt;Railsコンソールに入るコマンド。Railsコンソールは、バックエンドにRailsを採用する一つの理由になるぐらいの便利ツールで、正直Railsを使うならこれを使わないことは考えられないレベル。コンソールといいつつも、サンドバッグモードとかにしない限り、ここでのデータの追加とか削除は、すべて反映される。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails db:migrate&lt;&#x2F;td&gt;&lt;td&gt;migrationファイルのmigrationを実行する&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails db:migrate:status&lt;&#x2F;td&gt;&lt;td&gt;migrationの状況を確認する。upとかdownとかがわかる。railsの場合、migrationがpendingになるとエラーになるので、migrationの状況を確認することは意外とある。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails routes&lt;&#x2F;td&gt;&lt;td&gt;現在設定されているルーティングを確認できる。パイプでgrepをかけることも多い&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rspec&lt;&#x2F;td&gt;&lt;td&gt;rspecのgemがあるときに使うコマンド。事実上のデファクトのテスト実行コマンドであり、ファイル名とかを指定して実行することも多い。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rubocop&lt;&#x2F;td&gt;&lt;td&gt;rubocopのgemがあるときに使うコマンド。RailsのデファクトのLintツール&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails generate model&lt;&#x2F;td&gt;&lt;td&gt;モデル生成コマンド&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails generate controller&lt;&#x2F;td&gt;&lt;td&gt;コントローラー作成コマンド&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;rails generate migration&lt;&#x2F;td&gt;&lt;td&gt;migration作成コマンド&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;これ以外にも、よく使うと感じるコマンドは、&lt;br &#x2F;&gt;
あるかなと思います。(rails db:rollbackとか？)&lt;&#x2F;p&gt;
&lt;p&gt;ここでは、本当によく使うわというやつを&lt;br &#x2F;&gt;
上記に記述しました。&lt;&#x2F;p&gt;
&lt;p&gt;Rails Consoleは本当に便利なので&lt;br &#x2F;&gt;
いつもお世話になっております。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;679&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1019&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby on Rails CRUD作成】Partialとテストコード実装</title>
        <published>2023-02-16T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/crud/"/>
        <id>https://reisuta.com/crud/</id>
        
        <content type="html" xml:base="https://reisuta.com/crud/">&lt;h2 id=&quot;crudtoha&quot;&gt;CRUDとは？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;CRUDとは、データの作成(Create)、読み出し(Read)、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;更新(Update)、削除(Delete)の頭文字を繋げたもので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ソフトウェアの基本機能のことを言います。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
(※本記事では、Delete機能はまだ実装しません)&lt;&#x2F;p&gt;
&lt;p&gt;例えば、TODOアプリとかだと、&lt;br &#x2F;&gt;
タスクを作成して、その作ったタスクを確認して(読み出し)、&lt;br &#x2F;&gt;
タスクの期限を修正して(更新)、タスクを終えたら削除するというように、&lt;br &#x2F;&gt;
ほとんどのアプリケーションには、こうしたCRUDがあります。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby on Railsでは、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;routing.html#crud%E3%80%81verb%E3%80%81%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&quot;&gt;ドキュメント&lt;&#x2F;a&gt;にあるような、&lt;br &#x2F;&gt;
resourcesの7つのアクションがまさに、&lt;br &#x2F;&gt;
これらのCRUDのどれかに該当しているので、&lt;br &#x2F;&gt;
RailsだとCRUDはわかりやすいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;一般的に、CRUDの実装は、&lt;br &#x2F;&gt;
Web開発の基本とされており、&lt;br &#x2F;&gt;
first taskにされることが多かったりします。&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、このCRUDの実装をPartialという共通化を&lt;br &#x2F;&gt;
行って実装します。&lt;&#x2F;p&gt;
&lt;p&gt;その際、テストコードも実装します。&lt;&#x2F;p&gt;
&lt;p&gt;Ruby on Railsの開発環境をまだ構築していない人は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;rails-new&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で構築してから本記事を読むと、&lt;br &#x2F;&gt;
一層理解が深まるかと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;partialtoha&quot;&gt;Partialとは？&lt;&#x2F;h3&gt;
&lt;p&gt;さて、CRUD実装に際し、&lt;br &#x2F;&gt;
まず、Partialについて触れます。&lt;&#x2F;p&gt;
&lt;p&gt;Partialは、簡単に言えばテンプレートのことであり、&lt;br &#x2F;&gt;
辞書で調べたら部分的と訳されていました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;Ruby on Railsにおける、Partilaは、&lt;br &#x2F;&gt;
主にviewファイルで使い回すことができる、&lt;br &#x2F;&gt;
テンプレートであり、&lt;br &#x2F;&gt;
共通化された部分が記述されたファイルです。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Partilaファイルを呼び出すには、&lt;br &#x2F;&gt;
renderという関数を使って、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; render &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;partial:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;form&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; locals:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;action:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;new&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という風にします。&lt;&#x2F;p&gt;
&lt;p&gt;Rails Guideも詳しいです。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;layouts_and_rendering.html&quot;&gt;https:&#x2F;&#x2F;railsguides.jp&#x2F;layouts_and_rendering.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この場合は、actionという変数に、&lt;br &#x2F;&gt;
&#x27;new&#x27;という文字列を代入しています。&lt;&#x2F;p&gt;
&lt;p&gt;Rails Guideの場合は、&lt;br &#x2F;&gt;
form_withのmodelにわたす変数を&lt;br &#x2F;&gt;
ローカル変数にすることで、&lt;br &#x2F;&gt;
インスタンス変数への依存をなくしています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;form-with&quot;&gt;form_with&lt;&#x2F;h3&gt;
&lt;p&gt;railsのview層をjbuilderとかではなく、&lt;br &#x2F;&gt;
上記のようなhtml.erbとかは使う場合は、&lt;br &#x2F;&gt;
データの作成を画面上で行うことが想定されるため、&lt;br &#x2F;&gt;
そうしたデータを入力できるformが必要になるでしょう。&lt;br &#x2F;&gt;
(ちなみに、jbuilderはjsonを返すGemでして、&lt;br &#x2F;&gt;
主にRailsをapiサーバーとして使う際に使用します。)&lt;&#x2F;p&gt;
&lt;p&gt;そこで、使用頻度が高いメソッドが、form_withです。&lt;br &#x2F;&gt;
使用例としては、次のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;%=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; form_with&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;model:&lt;&#x2F;span&gt;&lt;span&gt; @aim,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; local: true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;lt;%= render &amp;quot;shared&#x2F;error_messages&amp;quot;, model: @aim %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;form-group mb-3&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; f.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :title&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;目標名&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; class:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;form-label background-color&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;lt;%= f.text_field :title, class: &amp;#39;form-control&amp;#39;, readonly: action===&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;form-group mb-3&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; f.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :reason&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;理由&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; class:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;form-label background-color&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;lt;%= f.text_area :reason, class: &amp;#39;form-control&amp;#39;, readonly: action===&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;form-group mb-3&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; f.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :advantage&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;得られるもの&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; class:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;form-label background-color&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;lt;%= f.text_area :advantage, class: &amp;#39;form-control&amp;#39;, readonly: action===&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;form-group mb-3&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; f.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :difficulty&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;難易度&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; class:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;form-label background-color&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    &amp;lt;%= f.text_field :difficulty, class: &amp;#39;form-control&amp;#39;, readonly: action===&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;div&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;div &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;form-group mb-3&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;% if&lt;&#x2F;span&gt;&lt;span&gt; action&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;===&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      &amp;lt;%= link_to &amp;#39;編集&amp;#39;, edit_aim_path(@aim.id), class: &amp;#39;btn btn-primary&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;% else&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      &amp;lt;%= f.submit &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt; @aim.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;new_record?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;新規作成&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;更新&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; }&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, class: &amp;#39;mt-3 btn btn-primary&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    &amp;lt;% end&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;lt;&#x2F;div&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;% end&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;form_withのちょっと癖のある挙動としては、&lt;br &#x2F;&gt;
一行目の、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;%=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; form_with&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;model:&lt;&#x2F;span&gt;&lt;span&gt; @aim,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; local: true&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;span&gt; |f|&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;の(model: @aim)の部分があります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、@aimのデータを作成したりしたい場合に指定しますが、&lt;strong&gt;&lt;mark&gt;@aimの中身が空の場合は、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;自動的にcreateアクションに飛ばされ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;中身が存在する場合は、updateアクションに飛ばされるという点です。&lt;&#x2F;mark&gt;&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、newやeditによって、&lt;br &#x2F;&gt;
インスタンス変数を分ける必要がないのは、&lt;br &#x2F;&gt;
メリットである反面、よしなに処理してくれている部分なので、&lt;br &#x2F;&gt;
直感的ではないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;フォームの各々は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;%=&lt;&#x2F;span&gt;&lt;span&gt; f.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :title&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;目標名&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; class:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;form-label background-color&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;lt;%= f.text_field :title, class: &amp;#39;form-control&amp;#39;, readonly: action===&amp;#39;show&amp;#39; %&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにします。&lt;&#x2F;p&gt;
&lt;p&gt;fは、一行目のform_withをdoで回している部分で、&lt;br &#x2F;&gt;
それにtitleのラベルとして、目標名を指定しています。&lt;br &#x2F;&gt;
classは、ちょっとしたデザインを付けているだけです。&lt;&#x2F;p&gt;
&lt;p&gt;text_fieldは、その名の通りtext_fieldを生成してくれて、&lt;br &#x2F;&gt;
それと@aimのtitleが紐付いています。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、@aim.titleが存在する場合は、その値が初期値として入力されている。&lt;br &#x2F;&gt;
readonlyオプションは、編集や入力をできなくします。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、先ほどのpartilaのローカル変数actionがshowという値だったときのみ、&lt;br &#x2F;&gt;
readonlyオプションが適用されます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;crud&#x2F;Screenshot-2023-02-13-at-9.12.45.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;こんな感じになる。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;昨今の開発では、&lt;br &#x2F;&gt;
フロントエンドはReact、バックエンドはRailsという、&lt;br &#x2F;&gt;
SPA構成が多いので、このようにerbを使ってRailsだけで&lt;br &#x2F;&gt;
フロントエンドもバックエンドも完結させるという構成は少なくなっている印象です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、以前ほどは、&lt;br &#x2F;&gt;
form_withの出番は減っている気もしますが、&lt;br &#x2F;&gt;
erbなどを使う際は、かなり使用頻度が高いので、&lt;br &#x2F;&gt;
大まかにでも覚えておくと役に立つと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tesutokodo&quot;&gt;テストコード&lt;&#x2F;h2&gt;
&lt;p&gt;Railsでは、TDD（テスト駆動開発）が推奨されているため、&lt;br &#x2F;&gt;
ベストプラクティスとしては、上記のCRUD処理のコードを書く前に、&lt;br &#x2F;&gt;
テストを書くことでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;テストを書く方法としては、&lt;br &#x2F;&gt;
デフォルトのminitestというライブリを使う方法もありますが、&lt;br &#x2F;&gt;
実務では、これではなくRspecというGemを使うケースが多いので、&lt;br &#x2F;&gt;
本記事でもこちらを使用して解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rspec&quot;&gt;Rspec&lt;&#x2F;h3&gt;
&lt;p&gt;早速Rspecでのテストコードを書いていきます。&lt;&#x2F;p&gt;
&lt;p&gt;aimのcreateやupdateのformを作ったので、&lt;br &#x2F;&gt;
そちらのテストを書いてみます。&lt;&#x2F;p&gt;
&lt;p&gt;テストの簡単なコード例としては、&lt;br &#x2F;&gt;
次のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;require&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;rails_helper&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;RSpec&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;describe&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Aims&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; type: :request&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  let!&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:aim1&lt;&#x2F;span&gt;&lt;span&gt;) {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; create&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:aim&lt;&#x2F;span&gt;&lt;span&gt;) }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  let&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:aim_params&lt;&#x2F;span&gt;&lt;span&gt;) { {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; title:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;aim1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; reason:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; advantage:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;test2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt; } }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  describe &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;GET &#x2F;new&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;returns http success&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      get &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;new&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      expect&lt;&#x2F;span&gt;&lt;span&gt;(response).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to have_http_status&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:success&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  describe &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;GET &#x2F;edit&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;returns http success&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      get &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      expect(response).to have_http_status(:success)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  describe &amp;#39;POST &#x2F;create&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    it &amp;#39;returns http success&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      post &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      expect(response).to have_http_status(302)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    context &amp;#39;正常系&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      it &amp;#39;レコードの数が一つ増える&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        expect do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;          post &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        end.to change { Aim.count }.by(1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      it &amp;#39;一覧画面にリダイレクトされる&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        post &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        expect(response).to redirect_to(aims_path)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    context &amp;#39;異常系&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      before do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        aim_params[:title] = &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      it &amp;#39;レコードの数が増えない&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        expect do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;          post &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        end.to change { Aim.count }.by(0)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      it &amp;#39;新規作成画面にレンダリングされる&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        post &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        expect(response).to render_template :new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  describe &amp;#39;PATCH &#x2F;update&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    it &amp;#39;returns http success&amp;#39; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;      patch &amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#{aim1.id}&amp;quot;, params: { aim: aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      expect&lt;&#x2F;span&gt;&lt;span&gt;(response).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to have_http_status&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;302&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    context &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;正常系&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;レコードの値が変更されている&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        patch &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; params:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; aim:&lt;&#x2F;span&gt;&lt;span&gt; aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;        expect&lt;&#x2F;span&gt;&lt;span&gt;(aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;reload&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:title&lt;&#x2F;span&gt;&lt;span&gt;]).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt; eq &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;aim1&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;一覧画面にリダイレクトされる&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        patch &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; params:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; aim:&lt;&#x2F;span&gt;&lt;span&gt; aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;        expect&lt;&#x2F;span&gt;&lt;span&gt;(response).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to redirect_to&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;aim_path&lt;&#x2F;span&gt;&lt;span&gt;(aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    context &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;異常系&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      before &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        aim_params[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:title&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;レコードの値が変更されていない&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        patch &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; params:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; aim:&lt;&#x2F;span&gt;&lt;span&gt; aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;        expect&lt;&#x2F;span&gt;&lt;span&gt;(aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;reload&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:title&lt;&#x2F;span&gt;&lt;span&gt;]).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt; eq &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;Golang取得&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      it &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;新規作成画面にレンダリングされる&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        patch &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&#x2F;aims&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;#{&lt;&#x2F;span&gt;&lt;span&gt;aim1.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; params:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; aim:&lt;&#x2F;span&gt;&lt;span&gt; aim_params }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;        expect&lt;&#x2F;span&gt;&lt;span&gt;(response).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;to&lt;&#x2F;span&gt;&lt;span&gt; render_template &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;      end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、割と簡素なパターンだが、&lt;br &#x2F;&gt;
レコードの値が、リクエストを送ることによって、&lt;br &#x2F;&gt;
変化しているかどうかを主にテストしています。&lt;&#x2F;p&gt;
&lt;p&gt;expectというマッチャーと、&lt;br &#x2F;&gt;
postやpatchというリクエストを送るメソッドを使って、&lt;br &#x2F;&gt;
テストをしているという感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;controllernokodo&quot;&gt;Controllerのコード&lt;&#x2F;h3&gt;
&lt;p&gt;さて、上記のようなテストがあるとしたら、&lt;br &#x2F;&gt;
最初は、controllerをまだ実装していないので、&lt;br &#x2F;&gt;
Redになるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;このテストをGreenにしていこうと思います。&lt;&#x2F;p&gt;
&lt;p&gt;作成処理としては、&lt;br &#x2F;&gt;
こんな感じのコードになります。。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;class&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;AimsController&lt;&#x2F;span&gt;&lt;span&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;font-style: italic;text-decoration: underline;&quot;&gt;ApplicationController&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  before_action &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:set_aim&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; only:&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:show&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :edit&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :update&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; index&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Aim&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ransack&lt;&#x2F;span&gt;&lt;span&gt;(params[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:q&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @aims&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; @q.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;result&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;page&lt;&#x2F;span&gt;&lt;span&gt;(params[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:page&lt;&#x2F;span&gt;&lt;span&gt;]).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;per&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;5&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; show&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Aim&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; create&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    @aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Aim&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span&gt;(aim_params)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; @aim.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;save&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      flash[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:success&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;目標を作成しました&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      redirect_to aims_path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      render &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;new&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; status: :unprocessable_entity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; edit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; @aim.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;update&lt;&#x2F;span&gt;&lt;span&gt;(aim_params)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      flash[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:success&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;目標を更新しました&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      redirect_to &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;aim_path&lt;&#x2F;span&gt;&lt;span&gt;(@aim.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;id&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      render &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;edit&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; status: :unprocessable_entity&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  private&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; set_aim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      @aim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; Aim&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;find&lt;&#x2F;span&gt;&lt;span&gt;(params[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:id&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; aim_params&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      params.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:aim&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;permit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:title&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :reason&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :advantage&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :difficulty&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;before_actionによって、&lt;br &#x2F;&gt;
それぞれ、show, edit, updateアクションが実行される前に、&lt;br &#x2F;&gt;
該当メソッド、この場合privateメソッドのset_aimが呼ばれます。&lt;&#x2F;p&gt;
&lt;p&gt;showアクションと、editアクションが空なのは、&lt;br &#x2F;&gt;
このbefore_actionのset_aim関数の処理だけで足りているからです。&lt;&#x2F;p&gt;
&lt;p&gt;残りの、createやupdateは、&lt;br &#x2F;&gt;
ほとんどRails Tutorialと同じようなコードだが、&lt;br &#x2F;&gt;
aim_paramsを割り当てて、&lt;br &#x2F;&gt;
DBへの保存が成功したら、&lt;br &#x2F;&gt;
flash messageを出し、&lt;br &#x2F;&gt;
失敗したら、それぞれの作成画面に戻し、&lt;br &#x2F;&gt;
status 422を返すという感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sutoronguparameta&quot;&gt;ストロングパラメータ&lt;&#x2F;h3&gt;
&lt;p&gt;さて、上記のコードの&lt;br &#x2F;&gt;
aim_paramsの部分だが、&lt;br &#x2F;&gt;
これは、俗に言うストロングパラメータの部分です。&lt;&#x2F;p&gt;
&lt;p&gt;ストロングパラメータとは、&lt;br &#x2F;&gt;
&lt;strong&gt;送られてくるparamsの値で&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;どれを許可するのか設定することです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;action_controller_overview.html&quot;&gt;https:&#x2F;&#x2F;railsguides.jp&#x2F;action_controller_overview.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、userモデルの作成において、&lt;br &#x2F;&gt;
adminという、管理者かどうかというカラムが存在した場合、&lt;br &#x2F;&gt;
ストロングパラメータで、許可するパラメータを指定しないと、&lt;br &#x2F;&gt;
誰でも管理者になることができてしまうという、&lt;br &#x2F;&gt;
脆弱性につながります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ストロングパラメータで、&lt;br &#x2F;&gt;
許可するパラメータを指定する必要があるのですが、&lt;br &#x2F;&gt;
その書き方は、上記のように、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; aim_params&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;   params.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;require&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:aim&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;permit&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;:title&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :reason&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :advantage&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; :difficulty&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように、permitを使って、&lt;br &#x2F;&gt;
この場合、title, reason, advantage, difficultyだけを許可するという感じです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Ruby on Rails7環境構築】Dockerでrails newする</title>
        <published>2023-01-29T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/rails-new/"/>
        <id>https://reisuta.com/rails-new/</id>
        
        <content type="html" xml:base="https://reisuta.com/rails-new/">&lt;h2 id=&quot;rails-newtoha&quot;&gt;rails newとは？&lt;&#x2F;h2&gt;
&lt;p&gt;rails newとは、&lt;br &#x2F;&gt;
文字通り、&lt;strong&gt;新しいrailsアプリケーションを作成するコマンドです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsdoc.com&#x2F;page&#x2F;rails_new&quot;&gt;rails new | Railsドキュメント (railsdoc.com)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、Dockerを使うので、&lt;br &#x2F;&gt;
ローカル環境にrailsをインストールしませんが、&lt;br &#x2F;&gt;
Dockerを使わない場合は、&lt;br &#x2F;&gt;
railsをインストールしないと、&lt;br &#x2F;&gt;
上記のコマンドは使えません。&lt;&#x2F;p&gt;
&lt;p&gt;個人開発であれば、&lt;br &#x2F;&gt;
rails newする機会はたくさんあると思いますが、&lt;br &#x2F;&gt;
実務だと、rails newコマンドは、&lt;br &#x2F;&gt;
新規開発プロジェクトの立ち上げになりますので、&lt;br &#x2F;&gt;
一定レベルのエンジニアかつ立ち位置でないと触れる機会が少ないコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;その点、ある意味伝説のコマンドです(笑)&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、私は新入社員チームの発表会のようなときに、&lt;br &#x2F;&gt;
リーダーとして、rails newした経験がありますが、&lt;br &#x2F;&gt;
これも正確には、実務ではないので、&lt;br &#x2F;&gt;
私も実務でrails newした経験はまだありません。&lt;&#x2F;p&gt;
&lt;p&gt;若干脱線しましたが、&lt;br &#x2F;&gt;
rails newコマンドには、&lt;br &#x2F;&gt;
ドキュメントに記載があるように、&lt;br &#x2F;&gt;
&lt;mark&gt;オプションが色々あり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;DBの指定や、apiモードの指定など、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;rails newの時点で行えます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;postgresqlwoshi-uchang-he-sanpurukomando&quot;&gt;PostgreSQLを使う場合(サンプルコマンド)&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;rails&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;appnam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; postgresql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;-dオプションでDBを指定します。&lt;br &#x2F;&gt;
デフォルトでは、sqlite3が使われますが、&lt;br &#x2F;&gt;
実務ではほとんど使わないので、&lt;br &#x2F;&gt;
実質上のデフォルトは、postgresqlと言っても過言ではありません。&lt;&#x2F;p&gt;
&lt;p&gt;もういい加減、&lt;br &#x2F;&gt;
sqliteをデフォルトにするのやめませんか？って&lt;br &#x2F;&gt;
思いますが、何か理由があるんでしょうかね。&lt;&#x2F;p&gt;
&lt;p&gt;他に有名なDBとしては、&lt;br &#x2F;&gt;
mysqlなどもありますが、&lt;br &#x2F;&gt;
どういうわけか、Rails界隈では、&lt;br &#x2F;&gt;
postgresqlが人気があるので、&lt;br &#x2F;&gt;
mysqlが採用されているケースは、&lt;br &#x2F;&gt;
postgresqlよりは少ない印象です。&lt;br &#x2F;&gt;
(ないわけではありません)&lt;&#x2F;p&gt;
&lt;p&gt;さて、書式については、&lt;br &#x2F;&gt;
&lt;strong&gt;-database=DATABASEという書式でも同様です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、特定のバージョンのrailsでrails newしたい場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;rails&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; _6.1.4_ new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;appnam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とすることで実行できます。&lt;&#x2F;p&gt;
&lt;p&gt;上記だと、6.1.4のrailsがインストールされます。&lt;&#x2F;p&gt;
&lt;p&gt;Railsは、5系、6系、7系で、&lt;br &#x2F;&gt;
微妙に挙動が違ったりするので、&lt;br &#x2F;&gt;
&lt;strong&gt;上記のようにバージョン指定でインストールする場面もあるかもしれません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ruby-on-railsnodokiyumento&quot;&gt;Ruby on Railsのドキュメント&lt;&#x2F;h2&gt;
&lt;p&gt;ちなみに、Ruby on Railsでよく参照するドキュメントは、&lt;br &#x2F;&gt;
上記のRailsドキュメントや、Rails ガイドが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsdoc.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;railsdoc.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;railsguides.jp&#x2F;&quot;&gt;https:&#x2F;&#x2F;railsguides.jp&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;いや、それにしてもRailsの場合、&lt;br &#x2F;&gt;
&lt;mark&gt;日本語で公式ドキュメントが読むことができるのが素晴らしいですね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これに慣れすぎると、&lt;br &#x2F;&gt;
英語のドキュメントが読めなくなってしまいます。(震え声)&lt;&#x2F;p&gt;
&lt;p&gt;一応、Railsにも英語のドキュメントがあり、&lt;br &#x2F;&gt;
稀ですが、上記の2つのドキュメントには記載がない、&lt;br &#x2F;&gt;
メソッドなどについて、調べたいときに参照したりします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;api.rubyonrails.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;api.rubyonrails.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;強強エンジニアに、Railsについて、&lt;br &#x2F;&gt;
質問すると、一定の確率で、&lt;br &#x2F;&gt;
上記の英語のドキュメントが返ってきます(笑)&lt;&#x2F;p&gt;
&lt;p&gt;あと、Railsは普通にGithubにもコードがあるので、&lt;br &#x2F;&gt;
ドキュメントどころか、コードを読めって言ってくる仙人エンジニアもいます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;rails&#x2F;rails&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最初のうちは、&lt;br &#x2F;&gt;
私が推奨した、日本語の2つのドキュメントだけ参照する形でも&lt;br &#x2F;&gt;
十分かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;というか、上記の日本語の2つのドキュメントすら読まずに、&lt;br &#x2F;&gt;
rails触っているエンジニアも、多いのが現状なので、&lt;br &#x2F;&gt;
上の2つをしっかり読むだけで、意外と平均以上行ける気がします...&lt;br &#x2F;&gt;
(真偽はわかりません)&lt;&#x2F;p&gt;
&lt;p&gt;いずれにしろ、Ruby on Railsは、&lt;br &#x2F;&gt;
公式ドキュメントがしっかりしているので、&lt;br &#x2F;&gt;
この点は大きな魅力ですね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dockerhuan-jing-derails-new&quot;&gt;Docker環境でrails new&lt;&#x2F;h2&gt;
&lt;p&gt;いよいよ、環境構築に入ります。&lt;&#x2F;p&gt;
&lt;p&gt;ローカルでrails newしてもいいのですが、&lt;br &#x2F;&gt;
その場合、rbenvとかrailsとかインストールするものが、&lt;br &#x2F;&gt;
多くなり、環境構築が煩雑になりがちです。&lt;br &#x2F;&gt;
(加えてM1だとエラーが起こりがち)&lt;&#x2F;p&gt;
&lt;p&gt;railsはM1とかだと上手く動かなかったりするので、&lt;br &#x2F;&gt;
Dockerでrails newを行います。&lt;&#x2F;p&gt;
&lt;p&gt;まずはDockerfileを作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ruby:3.0-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; apk update&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    apk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; upgrade&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    apk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --no-cache&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; gcompat&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    apk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --no-cache&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; linux-headers libxml2-dev make gcc libc-dev nodejs tzdata postgresql-dev postgresql git bash&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    apk&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --virtual&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; build-packages&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --no-cache&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; build-base curl-dev&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mkdir &#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ADD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile &#x2F;myapp&#x2F;Gemfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ADD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile.lock &#x2F;myapp&#x2F;Gemfile.lock&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; bundle install&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;RUN&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; apk del build-packages&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;ADD&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; . &#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;EXPOSE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 4000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;CMD&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;rails&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;server&amp;quot;, &amp;quot;-b&amp;quot;, &amp;quot;0.0.0.0&amp;quot;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ドキュメントの内容を参考に修正しました。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;compose&#x2F;rails.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;compose&#x2F;rails.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;alpine系のイメージを使ったのと、&lt;br &#x2F;&gt;
&lt;code&gt;apk add --no-cache gcompat &amp;amp;&amp;amp; \&lt;&#x2F;code&gt;の部分は、&lt;br &#x2F;&gt;
m1macに必要なので、入れております。&lt;&#x2F;p&gt;
&lt;p&gt;M1以外の人は、&lt;br &#x2F;&gt;
省略して大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;上記のDockerfileの大まかな処理内容としては、&lt;br &#x2F;&gt;
必要なライブラリのインストールを行い、&lt;br &#x2F;&gt;
GemfileとGemfile.lockをコンテナのディレクトリ内にコピーし、&lt;br &#x2F;&gt;
bundle installコマンドを実行している感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;bundle installは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;railsで使うコマンドで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;必要なライブラリ(gem)をインストールするコマンドです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あとは、rails serverという、&lt;br &#x2F;&gt;
ローカルサーバーを立ち上げるコマンドをCMDに設定しています。&lt;&#x2F;p&gt;
&lt;p&gt;なお、Dockerの基本知識に不安がある人は、&lt;br &#x2F;&gt;
下記の記事もご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1077&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gemfiletogemfile-lock&quot;&gt;GemfileとGemfile.lock&lt;&#x2F;h3&gt;
&lt;p&gt;Dockerfileを記述したので、&lt;br &#x2F;&gt;
次にGemfileを記載します。&lt;&#x2F;p&gt;
&lt;p&gt;rails7系にしたいので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;ruby&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;source &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;https:&#x2F;&#x2F;rubygems.org&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;gem &lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;rails&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;~&amp;gt;7.0.3&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにします。&lt;&#x2F;p&gt;
&lt;p&gt;Gemfileのバージョンの記法ですが、&lt;br &#x2F;&gt;
いくつかパターンがありまして、&lt;br &#x2F;&gt;
上記の ~&amp;gt;のような場合だと、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;7.0.3以上、7.1未満というように、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;最終桁が繰り上がった数値未満という感じになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;br &#x2F;&gt;
gem &#x27;rails&#x27;, &#x27;&amp;gt;=7.0.3&#x27;, &#x27;&amp;lt;7.1&#x27;&lt;br &#x2F;&gt;
と記載しても同じ意味になります。&lt;&#x2F;p&gt;
&lt;p&gt;Gemfileのバージョン指定の記法については、&lt;br &#x2F;&gt;
ドキュメントとかのわかりやすい箇所に載っていないので、&lt;br &#x2F;&gt;
混乱しがちですが、下記記事がわかりやすかったです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;autovice.jp&#x2F;articles&#x2F;118&quot;&gt;https:&#x2F;&#x2F;autovice.jp&#x2F;articles&#x2F;118&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Gemについては、&lt;br &#x2F;&gt;
下記のようなGemの一覧サイトのようなものがあり、&lt;br &#x2F;&gt;
バージョンを指定するのがよく分からなければ、&lt;br &#x2F;&gt;
下記のサイトのサンプルコードをそのまま貼り付けるというやり方でも、&lt;br &#x2F;&gt;
最初のうちは意外となんとかなります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rubygems.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;rubygems.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あと、そもそもバージョンを指定しないで、&lt;br &#x2F;&gt;
インストールすることもできます。(推奨ではありませんが)&lt;&#x2F;p&gt;
&lt;p&gt;railsもgemの一種ですが、&lt;br &#x2F;&gt;
railsのようにversionによって、&lt;br &#x2F;&gt;
センシティブに挙動が変わるgemは、&lt;br &#x2F;&gt;
バージョン指定にナーバスになるべきですが、&lt;br &#x2F;&gt;
それ以外のgemとかだと、意外と、&lt;br &#x2F;&gt;
バージョン指定なしで運用されていることもあります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、最初のうちは、&lt;br &#x2F;&gt;
そこまで神経質にならなくて大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;さてGemfileがそんな感じでして、&lt;br &#x2F;&gt;
&lt;strong&gt;次に、空のGemfile.lockも作成します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Gemfile.lockは、JavaScriptにおける、&lt;br &#x2F;&gt;
yarn.lockのようなインストールされているライブラリのバージョンを管理するファイルです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に手動では編集しません。&lt;br &#x2F;&gt;
bundle installでインストールされると、&lt;br &#x2F;&gt;
自動的に書き換えられます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;touch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Gemfile.lock&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;docker-compose-ymlzuo-cheng-tobuild&quot;&gt;docker-compose.yml作成とbuild&lt;&#x2F;h3&gt;
&lt;p&gt;最後にdocker-compose.ymlを作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;version:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;3.9&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  db:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    image:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; postgres&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; .&#x2F;tmp&#x2F;db:&#x2F;var&#x2F;lib&#x2F;postgresql&#x2F;data&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      POSTGRES_PASSWORD:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  web:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    build:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;    command&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;: bash&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;rm -f tmp&#x2F;pids&#x2F;server.pid &amp;amp;&amp;amp; bundle exec rails s -p 4000 -b &amp;#39;0.0.0.0&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    stdin_open:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    tty:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; .:&#x2F;myapp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;4000:4000&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;    depends_on:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;      -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; db&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、公式ドキュメントを参考にしている部分が多いです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.docker.jp&#x2F;compose&#x2F;rails.html&quot;&gt;https:&#x2F;&#x2F;docs.docker.jp&#x2F;compose&#x2F;rails.html&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ここまで来たら、&lt;br &#x2F;&gt;
いよいよrails newします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker-compose&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run web rails new .&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --force --database=postgresql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;新しいGemfileが作成されるので、&lt;br &#x2F;&gt;
buildします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; compose build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで雛形ができますが、&lt;br &#x2F;&gt;
DBの設定がまだなので、&lt;br &#x2F;&gt;
そちらを行います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;database-ymlnoshe-ding-tokontenali-tishang-ge&quot;&gt;database.ymlの設定とコンテナ立ち上げ&lt;&#x2F;h3&gt;
&lt;p&gt;下記はrailsプロジェクト配下の&lt;br &#x2F;&gt;
config&#x2F;database.ymlというファイルです。&lt;&#x2F;p&gt;
&lt;p&gt;defaultで設定されている部分に、&lt;br &#x2F;&gt;
DBのusernameやpasswordなどといったことを設定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;default:&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  adapter:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; postgresql&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  encoding:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; unicode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  host:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; db&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  username:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; postgres&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  password:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; password&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  pool:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;development:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; *default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  database: myapp_development&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;test:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  &amp;lt;&amp;lt;: *default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  database: myapp_test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;最後にコンテナを立ち上げます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; compose up&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただおそらく、これで、&lt;br &#x2F;&gt;
localhost:4000にアクセスしても、&lt;br &#x2F;&gt;
ActiveRecord::NoDatabaseErrorというエラーが出るかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;rails-new&#x2F;Screenshot-2023-09-12-at-13.44.37.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのまんまのエラーなので、&lt;br &#x2F;&gt;
DBを作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker-compose&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run web rails db:create&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このあとは、出ない場合もありますが、&lt;br &#x2F;&gt;
もし、pending migration errorというのが出たら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker-compose&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run web rails db:migrate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で治るかなと思います。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>VimとNeovimの違いについて init.vimサンプル公開</title>
        <published>2023-01-29T00:00:00+00:00</published>
        <updated>2023-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/vim-neovim/"/>
        <id>https://reisuta.com/vim-neovim/</id>
        
        <content type="html" xml:base="https://reisuta.com/vim-neovim/">&lt;p&gt;本記事では、VimとNeovimの違いについて、&lt;br &#x2F;&gt;
解説します。&lt;&#x2F;p&gt;
&lt;p&gt;VimとNeovimの違いについては、&lt;br &#x2F;&gt;
普段頻繁にVimなどを使う方でなければ、&lt;br &#x2F;&gt;
正直、あまり気にしなくてもいいかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;mark&gt;VimやNeovimを本格的に使用していくことを考えると、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;やはりこの2つについて、大まかに違いを知っておきたいもの。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、この2つの違いについてまとめました。&lt;&#x2F;p&gt;
&lt;p&gt;Vimの基本操作や、プラグイン、知っておきたい使い方など、&lt;br &#x2F;&gt;
Vimの入門については、下記のYoutube動画でまとめて解説しております。&lt;&#x2F;p&gt;
&lt;p&gt;これからVimを触るという方でも、&lt;br &#x2F;&gt;
VimでVSCode並の開発ができることを目指した&lt;br &#x2F;&gt;
動画なので、VimやNeovimに興味がある方はぜひ御覧ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UCsQKboXGGHPtITUO2i0B8gQ&quot;&gt;https:&#x2F;&#x2F;www.youtube.com&#x2F;channel&#x2F;UCsQKboXGGHPtITUO2i0B8gQ&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neovimtohahe-ka&quot;&gt;Neovimとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;Neovimは、Vimをフォークしたものの一つで、&lt;br &#x2F;&gt;
基本的には、Vimを改良したものとされています。&lt;&#x2F;p&gt;
&lt;p&gt;細かい思想の違いなども、あるようですが、&lt;br &#x2F;&gt;
&lt;strong&gt;平たく言えば進化系&lt;&#x2F;strong&gt;だと思ってもらって大丈夫です。&lt;br &#x2F;&gt;
(進化の方向性としては、個人的にはよりリッチで操作性が良いIDEのようなイメージです)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;&quot;&gt;https:&#x2F;&#x2F;neovim.io&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そもそもVim自体がViのクローンなので、&lt;br &#x2F;&gt;
NeoVimは、クローンのクローンみたいな感じかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;最近だと、Viに触れる機会はかなり減っている印象ですが、&lt;br &#x2F;&gt;
Viは、Vimよりも操作感やUIが玄人向け、&lt;br &#x2F;&gt;
悪く言えば、使いにくい印象でした。&lt;&#x2F;p&gt;
&lt;p&gt;なので、Vimも、今のNeovimのように、&lt;br &#x2F;&gt;
ある種の進化系といえそうです。&lt;br &#x2F;&gt;
(Neovimはその進化系なので、Viとはかなり違います)&lt;&#x2F;p&gt;
&lt;p&gt;最近だと、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;astronvim.com&#x2F;&quot;&gt;AstroNvim&lt;&#x2F;a&gt; のような、&lt;br &#x2F;&gt;
&lt;mark&gt;デフォルトで使いやすく設定された、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ある種の完成版Neovimのようなものもあります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ここまで来ると、&lt;br &#x2F;&gt;
初期のVi信者とかからすると、&lt;br &#x2F;&gt;
「これはViじゃない」と怒り狂いそうなぐらい、&lt;br &#x2F;&gt;
良く言えば、進化してます。（悪く言えば本流から外れています。)&lt;&#x2F;p&gt;
&lt;p&gt;Neovimだと、Telescope.nvimのような&lt;br &#x2F;&gt;
便利なNeovim製のプラグインが使えるというメリットが有るので、&lt;br &#x2F;&gt;
特にこだわりなければ、Neovim一択のような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;設定ファイルについては、.vimrcではなく、&lt;br &#x2F;&gt;
~&#x2F;.config&#x2F;nvim&#x2F;init.vim または、init.luaとかに&lt;&#x2F;strong&gt;なります。&lt;&#x2F;p&gt;
&lt;p&gt;Vimで使っていたプラグインについても、&lt;br &#x2F;&gt;
Neovimで使えます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、やはり特にこだわりがなければ、&lt;br &#x2F;&gt;
今ならいきなりNeovimから使い始めて問題ないと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neovimtovimnowei-i&quot;&gt;NeovimとVimの違い&lt;&#x2F;h2&gt;
&lt;p&gt;早速本題です。&lt;br &#x2F;&gt;
両者の違いですが、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;正直、Vimをたまに使うぐらいであれば、&lt;br &#x2F;&gt;
Neovimだろうと、Vimだろうと大差ありません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使いやすい方を使えばいいと思います。&lt;br &#x2F;&gt;
(そこまで操作性に違いはないと思いますが...)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、前述のように、&lt;br &#x2F;&gt;
&lt;mark&gt;Neovimは、よりリッチで、IDEっぽくできる(Vimでもできるといえばできますが)ので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;今から入門するなら、個人的にはNeovimをおすすめします。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらを踏まえて、&lt;br &#x2F;&gt;
詳細な違いについて触れていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;insertmodoshi-nokasoru&quot;&gt;INSERTモード時のカーソル&lt;&#x2F;h3&gt;
&lt;p&gt;INSERTモードに入ったときに表示される、&lt;br &#x2F;&gt;
カーソルがNeovimとVimでは異なります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-neovim&#x2F;Screenshot-2023-01-29-at-18.10.12-1024x541.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;左がVim、右がNeovim&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Vimの場合、NORMALモードのときと、&lt;br &#x2F;&gt;
カーソルの形が変わりませんが、&lt;br &#x2F;&gt;
Neovimの場合、| に変化します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この点は、おそらくNeovimの方が&lt;br &#x2F;&gt;
見やすくて便利でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Vimは、カーソルだけなので、&lt;br &#x2F;&gt;
今のモードがなにかわかりにくいです。&lt;&#x2F;p&gt;
&lt;p&gt;カーソルの前に文字が入るのか後ろに入るのか、&lt;br &#x2F;&gt;
直感的ではないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、慣れの範疇の気もするので、&lt;br &#x2F;&gt;
割りと些末な違いになるかもしれません。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;taminarumodo&quot;&gt;ターミナルモード&lt;&#x2F;h3&gt;
&lt;p&gt;ターミナルモードに入ったときも、&lt;br &#x2F;&gt;
挙動が異なります。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ターミナルモードとは、&lt;br &#x2F;&gt;
INSERTモードとかと同様のモードの一種で、&lt;br &#x2F;&gt;
:termで入ることができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-neovim&#x2F;Screenshot-2023-01-29-at-18.13.17-2-1024x576.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vimの場合、splitしてから、&lt;br &#x2F;&gt;
ターミナルモードに入ります。&lt;&#x2F;p&gt;
&lt;p&gt;これに対し、Neovimはカレントバッファーをまるごと、&lt;br &#x2F;&gt;
ターミナルにしてしまい、デフォルトで&lt;br &#x2F;&gt;
ノーマルモードになっています。&lt;&#x2F;p&gt;
&lt;p&gt;これは、好みが分かれそうですが、&lt;br &#x2F;&gt;
&lt;strong&gt;個人的にはVimの方が、&lt;br &#x2F;&gt;
すぐにコマンドが打てるのと、&lt;br &#x2F;&gt;
Ctrl + wで移動しやすいので、便利かなと思いました。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(人によっては、Neovimのほうが便利という人もいます。)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Neovimの方でも、iを押せば、&lt;br &#x2F;&gt;
すぐにコマンドが打てますし、&lt;br &#x2F;&gt;
&lt;strong&gt;戻りたいときは、Ctrl + \ Ctrl + nで戻ることができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;しかし、デフォルトのキーバインドだとめちゃくちゃ押しづらいので、&lt;br &#x2F;&gt;
キーマップを設定するのが良いでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;tnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;spac&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで、spaceとjjを押せば、&lt;br &#x2F;&gt;
簡単にフォーカスを外すことができます。&lt;&#x2F;p&gt;
&lt;p&gt;キーマップの詳細については、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;map-command&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;を御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;119&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトだと、若干Vimのほうが使いやすそうなものの、&lt;br &#x2F;&gt;
Neovimでも設定はできるので、&lt;br &#x2F;&gt;
&lt;strong&gt;そこまで大差ないとみなして大丈夫そうです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Neovimには、toggleterm.nvimという&lt;br &#x2F;&gt;
便利なプラグインも存在するので、&lt;br &#x2F;&gt;
これを使えば、むしろNeovimのほうが良いぐらいでしょう。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;mGHeL5-qJQc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;neovimhashe-ding-woluadeshu-keru&quot;&gt;Neovimは設定をLuaで書ける&lt;&#x2F;h3&gt;
&lt;p&gt;通常、Vimの設定とかカスタマイズは、&lt;br &#x2F;&gt;
Vim scriptで行いますが、&lt;br &#x2F;&gt;
&lt;strong&gt;Neovimは、Luaでもできます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vim scriptとLuaの2つ選択肢があるのは、&lt;br &#x2F;&gt;
素敵ですね。&lt;&#x2F;p&gt;
&lt;p&gt;「Vim scriptは書きにくい！」という意見は、&lt;br &#x2F;&gt;
ちらほら聞くので、Luaでも書けるというのは、&lt;br &#x2F;&gt;
メリットとみなしていいでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、Neovim使い始めでいきなりluaで書く必要はない気もします。&lt;br &#x2F;&gt;
というのも、なんだかんだでVim scriptの資産は多いので、&lt;br &#x2F;&gt;
そちらの知識も多少は持っておいたほうが役に立つことが多いからです。&lt;&#x2F;p&gt;
&lt;p&gt;まあそうは言っても、Neovim製のイケてるプラグインは、基本Luaで記載されているので、&lt;br &#x2F;&gt;
これからは、徐々にVimScriptからLuaに切り替わっていくような気もしますが...&lt;&#x2F;p&gt;
&lt;p&gt;既にVim scriptで、膨大な設定ファイルを持っている方は、&lt;br &#x2F;&gt;
移行コストがかかると思うので、無理して移行する必要はないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それに、Vim scriptからLuaを呼び出すこともできるので、&lt;br &#x2F;&gt;
ベースは、Vim scriptで、Luaをサブで呼び出すみたいにすれば、&lt;br &#x2F;&gt;
ほとんど移行コストもかからないと思います。&lt;br &#x2F;&gt;
&lt;mark&gt;（個人的にはLua完全移行が推奨ではありますが...)&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、LuaからVim scriptを呼び出すという逆パターンもできるので、&lt;br &#x2F;&gt;
設定ファイルだけ、init.luaにしては、中身はVim scriptという、&lt;br &#x2F;&gt;
荒業もできなくはないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Vim scriptからLuaへの移行については、&lt;br &#x2F;&gt;
下記が詳しいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;willelz&#x2F;nvim-lua-guide-ja&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;willelz&#x2F;nvim-lua-guide-ja&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vim scriptからLuaを呼び出す記法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;lua&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;require(&amp;#39;gitsigns&amp;#39;).setup {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;-- 中略&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように、ヒアドキュメントのように、&lt;br &#x2F;&gt;
先頭にluaと宣言し、EOFとかの中に閉じ込めれば、&lt;br &#x2F;&gt;
Vim scriptの中でLuaが使えます。&lt;&#x2F;p&gt;
&lt;p&gt;最近では、プラグインのREADMEに、&lt;br &#x2F;&gt;
Vim scriptの場合での説明がなかったりするので、&lt;br &#x2F;&gt;
プラグインとかをNeovimに寄せていくのであれば、&lt;br &#x2F;&gt;
Luaに移行した方が良さそうです。&lt;&#x2F;p&gt;
&lt;p&gt;あくまで、Vimベースでいくのであれば、&lt;br &#x2F;&gt;
Luaにしなくてもいいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;Vimでしか動かないプラグインなども&lt;br &#x2F;&gt;
確かあったと思うので、どっちがどっちというわけでもないと思うので。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vimnofang-gainsutorusareteiruhuan-jing-haduo-i&quot;&gt;Vimの方がインストールされている環境は多い&lt;&#x2F;h3&gt;
&lt;p&gt;Unix系であれば、Vimはデフォルトで&lt;br &#x2F;&gt;
インストールされていることが多いのに対し、&lt;br &#x2F;&gt;
Neovimは自分でインストールすることがほとんどです。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、本番サーバとかは、&lt;br &#x2F;&gt;
極力余計なものをインストールしないようにするのが、&lt;br &#x2F;&gt;
普通だと思うので、気軽にNeovimとかはインストールできないでしょう。&lt;br &#x2F;&gt;
(それと複数人がsshする、本番サーバーで、個人の趣味でNeovimを入れてしまったら、&lt;br &#x2F;&gt;
宗教戦争になります。)&lt;&#x2F;p&gt;
&lt;p&gt;なので、本番サーバーとかでは、&lt;br &#x2F;&gt;
&lt;mark&gt;Vim(それもプラグインとかなしの素のVim)を使うことを余儀なくされると思うので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Neovimの便利さに慣れすぎると、その時、結構困るかもしれませんね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もともとVimはシンプルなことをやるエディターで、&lt;br &#x2F;&gt;
AstroNvimみたいに、VSCode顔負けに設定することは、&lt;br &#x2F;&gt;
本流から外れているみたいな思想もあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;そういう意味では、あえてNeovimにせず、&lt;br &#x2F;&gt;
素のVimを極めるという方向性も面白いと思います。&lt;br &#x2F;&gt;
(素のVimだけでもできることはかなりあります。)&lt;&#x2F;p&gt;
&lt;p&gt;Neovimもデフォルトでインストールされているように&lt;br &#x2F;&gt;
なっていけば、状況も変わるかもしれませんが、&lt;br &#x2F;&gt;
現時点ではViやVimが圧倒的です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;she-ding-huairunodeirekutorijie-ceng-gayi-naru&quot;&gt;設定ファイルのディレクトリ階層が異なる&lt;&#x2F;h3&gt;
&lt;p&gt;先述しましたが、&lt;br &#x2F;&gt;
Neovimだと、&lt;del&gt;&#x2F;.config&#x2F;nvim&#x2F;init.vimになります。&lt;br &#x2F;&gt;
Vimだと、&lt;&#x2F;del&gt;&#x2F;.vimrcなので、&lt;br &#x2F;&gt;
Neovimのほうが階層深めですね。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、requireとかで分けて呼び出すこともできるので、&lt;br &#x2F;&gt;
これは正直どっちでも良いような気もしますし、&lt;br &#x2F;&gt;
慣れのような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、私はやっていませんが、&lt;br &#x2F;&gt;
&lt;mark&gt;NeovimとVimで設定を使い分けていたりすると、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;楽しいかもしれません。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;(NeovimはIDE寄り、Viｍは素の設定寄りのように)&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;設定例については、本記事の最後でサンプルコードを掲載しております。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;andoukomandonoju-dong&quot;&gt;アンドゥコマンドの挙動&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-neovim&#x2F;e0c6ba7abba191b99eac7d1fada8b014-1024x478.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;左がNeovim、右がvim&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;アンドゥコマンド(u)の挙動が微妙に異なります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;上記の画像のとおりですが、履歴のみなし方が、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;VimとNeovimでは異なります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、正直好みでしょうね。&lt;br &#x2F;&gt;
もう慣れている方が使いやすいに尽きると思います。&lt;&#x2F;p&gt;
&lt;p&gt;私は、Neovimのほうが長いので、&lt;br &#x2F;&gt;
Neovimの挙動のほうが直感的に感じます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;init-vimto-tmux-confnosanpurukodo&quot;&gt;init.vimと.tmux.confのサンプルコード&lt;&#x2F;h2&gt;
&lt;p&gt;せっかくなので、&lt;br &#x2F;&gt;
私のinit.vimをさらします。&lt;&#x2F;p&gt;
&lt;p&gt;細かい設定や、キーマップとかは不十分なのと、&lt;br &#x2F;&gt;
そこまでおすすめでもないプラグインもまざっているので、&lt;br &#x2F;&gt;
こだわる人は、自分なりにカスタマイズしてください&lt;&#x2F;p&gt;
&lt;p&gt;特にこだわりなければ、下記の設定でも、&lt;br &#x2F;&gt;
&lt;strong&gt;VSCode不要で開発できるぐらいには、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;NeovimやVimを使うことができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mapleader = &amp;quot;\&amp;lt;space&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; shiftwidth=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;syntax&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; showmode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tabstop=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; incsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; clipboard=unnamed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorline&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;highlight&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; CursorLine ctermfg=Blue ctermbg=Green&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorcolumn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; autoindent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; expandtab&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; autowrite&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; laststatus=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; list &amp;quot; 不可視文字を表示&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;set foldmethod=indent&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;abbr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; _sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; #!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#begin&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;ntk148v&#x2F;vim-horizon&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;preservim&#x2F;nerdtree&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;lambdalisue&#x2F;fern.vim&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;nathanaelkane&#x2F;vim-indent-guides&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;lambdalisue&#x2F;fern-git-status.vim&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;neoclide&#x2F;coc.nvim&amp;#39;, {&amp;#39;branch&amp;#39;: &amp;#39;release&amp;#39;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;junegunn&#x2F;fzf&amp;#39;, { &amp;#39;do&amp;#39;: {&lt;&#x2F;span&gt;&lt;span&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; fzf#install&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; } }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;yuki-yano&#x2F;fzf-preview.vim&amp;#39;, { &amp;#39;branch&amp;#39;: &amp;#39;release&#x2F;rpc&amp;#39; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;PhilRunninger&#x2F;nerdtree-visual-selection.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;b4b4r07&#x2F;vim-shellutils&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;alvan&#x2F;vim-closetag.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;easymotion&#x2F;vim-easymotion&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;preservim&#x2F;nerdtree&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;            \&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Plug &amp;#39;Xuyuanp&#x2F;nerdtree-git-plugin&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;posva&#x2F;vim-vue.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;tyru&#x2F;open-browser.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;github.com&#x2F;lambdalisue&#x2F;gina.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-commentary.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-surround.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;simeji&#x2F;winresizer.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;easymotion&#x2F;vim-easymotion.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;junegunn&#x2F;goyo.vim&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;Shougo&#x2F;unite.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;Shougo&#x2F;neomru.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;ctrlpvim&#x2F;ctrlp.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;vimplugin&#x2F;project.vim&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;Quramy&#x2F;tsuquyomi&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;vim-syntastic&#x2F;syntastic&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Shougo&#x2F;vimproc.vim&amp;#39;, {&amp;#39;do&amp;#39; : &amp;#39;make&amp;#39;}&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;ycm-core&#x2F;YouCompleteMe&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vim-test&#x2F;vim-test&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;vim-scripts&#x2F;ScrollColors&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;kyazdani42&#x2F;blue-moon&amp;#39;Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;AlessandroYorba&#x2F;Breve.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;vim-jp&#x2F;vimdoc-ja&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;leafgarland&#x2F;typescript-vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;peitalin&#x2F;vim-jsx-typescript&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;nvim-treesitter&#x2F;nvim-treesitter&amp;#39;, {&amp;#39;do&amp;#39;: &amp;#39;:TSUpdate&amp;#39;}&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#end&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:ctrlp_user_command =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;.git&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;cd %s &amp;amp;&amp;amp; git ls-files&amp;#39;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:typescript_indent_disable =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; { {}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;LEF&lt;&#x2F;span&gt;&lt;span&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; [ []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;LEFT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; ( ()&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot; &amp;quot;&amp;quot;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap &amp;#39; &amp;#39;&amp;#39;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap jj &amp;lt;ESC&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; un :&amp;lt;C-u&amp;gt;Unite buffer&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; unf :&amp;lt;C-u&amp;gt;Unite file&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; ufr :&amp;lt;C-u&amp;gt;Unite file_rec&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; ub :&amp;lt;C-u&amp;gt;Unite bookmark&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; umru :&amp;lt;C-u&amp;gt;Unite file_mru&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;silent&amp;gt; ur :&amp;lt;C-u&amp;gt;Unite -buffer-name=register register&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;ESC&amp;gt;&amp;lt;ESC&amp;gt; :nohlsearch&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ss ^&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ;; $&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;C-n&amp;gt; :NERDTree&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;C-t&amp;gt; :NERDTreeToggle&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! -nargs=0 Format :call CocAction(&amp;#39;format&amp;#39;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! Solitary :echo &amp;#39;人生字を識るは憂患の始まり&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! SS :so ~&#x2F;.config&#x2F;nvim&#x2F;init.vim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! Svs :source ~&#x2F;.vimrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! Co :colorscheme&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command  Eve :colorscheme evening&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;clet mapleader = &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;spac&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;ommand! Bre :colorscheme breve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command  Horizon :colorscheme horizon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nmap &amp;lt;silent&amp;gt; &amp;lt;space&amp;gt;fmt &amp;lt;Plug&amp;gt;(coc-format)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nmap gx &amp;lt;Plug&amp;gt;(openbrowser-smart-search)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;vmap gx &amp;lt;Plug&amp;gt;(openbrowser-smart-search)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;Leader&amp;gt;o :&amp;lt;C-u&amp;gt;execute &amp;quot;OpenBrowser&amp;quot; &amp;quot;file:&#x2F;&#x2F;&#x2F;&amp;quot; . expand(&amp;#39;%:p:gs?&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\\&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;?&#x2F;?&amp;#39;)&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;let g:indent_guides_enable_on_vim_startup = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;let g:gitgutter_highlight_lines = 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;let g:closetag_filenames = &amp;#39;*.html,*.xhtml,*.phtml,*.ctp,*.php,*.vue&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;set helplang=ja,en &amp;quot; vim help日本語化のため&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; termguicolors&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot; colorscheme slate&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; colorscheme horizon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot; colorscheme hybrid&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; colorscheme blue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot; colorscheme evening&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;colorscheme blue-moon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;let g:lightline = { &amp;#39;colorscheme&amp;#39;: &amp;#39;blue-moon&amp;#39; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; Rubyの文法チェック&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;augroup rbsyntaxcheck&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  autocmd!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  autocmd BufWrite *.rb w !ruby -c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;augroup END&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot; ファイル名表示&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; statusline=%F&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:syntastic_always_populate_loc_list =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:syntastic_auto_loc_list =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:syntastic_check_on_open =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:syntastic_check_on_wq =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;基本的には、&lt;br &#x2F;&gt;
.vimrcでも同様に作用するはずです。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインのインストールは、&lt;br &#x2F;&gt;
上記では、vim-plugを使っているので、&lt;br &#x2F;&gt;
:PlugInstallで導入できます。&lt;&#x2F;p&gt;
&lt;p&gt;詳しい導入手順については、&lt;br &#x2F;&gt;
下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;93&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;あと、これは完全におまけですが、&lt;br &#x2F;&gt;
Neovim(IDE寄り)を使う際は、&lt;br &#x2F;&gt;
個人的には、Tmuxも必須なので、&lt;br &#x2F;&gt;
そちらも一旦さらします。(そこまで凝った設定はしておりません)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; prefix C-s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;unbind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; C-b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; d split-window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; v split-window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; s choose-tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -Zw&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; r source-file ~&#x2F;.tmux.conf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; display &amp;quot;Reloaded!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; h select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -L&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; j select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; k select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; l select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -R&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; base-index&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mouse on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-window-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mode-keys vi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-right-length&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 190&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-bg &amp;quot;colour52&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-fg &amp;quot;colour93&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-left  &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#[bg=colour129]#[fg=colour255] #S:#I.#P &amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-interval&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-justify centre&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;set-option&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; status-right &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#[fg=colour93]#[bg=colour52]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; #h #(echo &amp;#39;嗟嘆&amp;#39;) &lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#[fg=colour255]#[bg=colour52]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;%Y&#x2F;%m&#x2F;%d(%a) %H:%M:%S&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;setw&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; window-status-current-format &amp;#39;\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#[fg=colour249]#[bg=colour234]#[bg=colour239]#[fg=colour119]\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#I#[fg=colour220]:#[fg=colour255]#W#[fg=colour249]\&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;#F#[fg=colour239]#[bg=colour234]&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-mode-vi v send-keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; begin-selection&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-mode-vi V send-keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; select-line&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-mode-vi C-v send-keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; rectangle-toggle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-mode-vi y send-keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-selection&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-mode-vi Y send-keys&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -X&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; copy-line&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind-key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; WheelUpPane if-shell&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -F -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; = &amp;quot;#{mouse_any_flag}&amp;quot; &amp;quot;send-keys -M&amp;quot; &amp;quot;if -Ft= &amp;#39;#{pane_in_mode}&amp;#39; &amp;#39;send-keys -M&amp;#39; &amp;#39;select-pane -t=; copy-mode -e; send-keys -M&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Tmuxの詳細については、下記の記事でも紹介しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;143&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;vimやNeovimについて本格的に勉強したい方は、&lt;br &#x2F;&gt;
書籍もおすすめです。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297111694.jpg&quot; alt=&quot;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Vim%20%5B%20Ruslan%20Osipov%20%E8%91%97%E3%80%81%E5%A4%A7%E5%80%89%20%E9%9B%85%E5%8F%B2%20%E8%A8%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16278398&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774147956.jpg&quot; alt=&quot;【中古】Vimテクニックバイブル 作業効率をカイゼンする150の技 &amp;#x2F;技術評論社&amp;#x2F;Vimサポ-タ-ズ（単行本（ソフトカバー））&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【中古】Vimテクニックバイブル 作業効率をカイゼンする150の技 &amp;#x2F;技術評論社&amp;#x2F;Vimサポ-タ-ズ（単行本（ソフトカバー））&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E4%B8%AD%E5%8F%A4%E3%80%91Vim%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB%20%E4%BD%9C%E6%A5%AD%E5%8A%B9%E7%8E%87%E3%82%92%E3%82%AB%E3%82%A4%E3%82%BC%E3%83%B3%E3%81%99%E3%82%8B150%E3%81%AE%E6%8A%80%20%2F%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE%2FVim%E3%82%B5%E3%83%9D-%E3%82%BF-%E3%82%BA%EF%BC%88%E5%8D%98%E8%A1%8C%E6%9C%AC%EF%BC%88%E3%82%BD%E3%83%95%E3%83%88%E3%82%AB%E3%83%90%E3%83%BC%EF%BC%89%EF%BC%89&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;vaboo&amp;#x2F;va7958414477u20&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000001734574.jpg&quot; alt=&quot;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%AE%9F%E8%B7%B5Vim%E3%80%80%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86%EF%BC%81%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20Drew%E3%80%80Neil%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;6e08bf5776463bf5a3cbc33848706e1f&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Tmux入門】インストールから操作設定まで完全解説</title>
        <published>2023-01-24T00:00:00+00:00</published>
        <updated>2023-09-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/tmux/"/>
        <id>https://reisuta.com/tmux/</id>
        
        <content type="html" xml:base="https://reisuta.com/tmux/">&lt;p&gt;本ブログでは、&lt;br &#x2F;&gt;
主にVim&#x2F;Neovim系の記事が多いのですが、&lt;br &#x2F;&gt;
Vim&#x2F;Neovimには、どんなときにも一緒に戦う相棒が存在します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;それがTmuxです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Tmuxだけでもダメですし、&lt;br &#x2F;&gt;
Vimだけでもだめです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;Tmux +Vimでこそ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;真のターミナルVim環境が完成します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなVimの相棒のTmuxについて、&lt;br &#x2F;&gt;
インストールから設定の詳細まで解説します。&lt;&#x2F;p&gt;
&lt;p&gt;動画でご覧になりたい方は、&lt;br &#x2F;&gt;
下記をご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wLuz3HQogW4&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;tmuxtoha&quot;&gt;Tmuxとは?&lt;&#x2F;h2&gt;
&lt;p&gt;まず、Tmuxとは何者でしょうか？&lt;br &#x2F;&gt;
よく端末多重化ソフトウェアと称されることが多い、Tmux。&lt;&#x2F;p&gt;
&lt;p&gt;ぶっちゃけよくわかんないですよね。&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;平たく言うと、ターミナルを便利にしてくれるもので、&lt;br &#x2F;&gt;
分割とか、新しいウインドウとかの管理を楽にしてくれ、&lt;br &#x2F;&gt;
使いこなせば、ディレクトリごとにターミナルを管理といったことも容易にしてくれます。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tmux&#x2F;tmux&#x2F;wiki&#x2F;Getting-Started&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;tmux&#x2F;tmux&#x2F;wiki&#x2F;Getting-Started&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;VimはVSCodeみたいに、&lt;br &#x2F;&gt;
簡単にターミナルをマウスでぐにゅっと引っ張り出してくる機能はないので、&lt;br &#x2F;&gt;
ターミナルの相棒みたいなやつが便利です。&lt;br &#x2F;&gt;
(プラグインのtoggletermで近いことはできますが。&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;&quot;&gt;参考記事&lt;&#x2F;a&gt;)&lt;&#x2F;p&gt;
&lt;p&gt;このターミナルの相棒がTmuxなのですが、&lt;br &#x2F;&gt;
これを入れると、Vim単体ではできないことも実現できるようになり、&lt;br &#x2F;&gt;
統合的なターミナルVim環境が完成します。&lt;&#x2F;p&gt;
&lt;p&gt;以下、インストールから操作まで解説していきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tmuxnoinsutorukaraqi-dong&quot;&gt;Tmuxのインストールから起動&lt;&#x2F;h2&gt;
&lt;p&gt;Macの場合、Homebrewでインストールできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;brew install tmux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Homebrewについては、&lt;br &#x2F;&gt;
下記の記事でも言及しているので、&lt;br &#x2F;&gt;
よろしければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;295&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;さて、インストールしたら、&lt;br &#x2F;&gt;
早速起動してみます。&lt;&#x2F;p&gt;
&lt;p&gt;そのままtmuxというコマンドを打ちます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tmux&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screen-Shot-2023-03-19-at-16.40.00-1024x694.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下にステータスバーが追加されました。&lt;br &#x2F;&gt;
もう、私は何年もTmuxを使用しない生活をしていません。&lt;&#x2F;p&gt;
&lt;p&gt;このステータスバーで優しく包み込んでくれるターミナルじゃないと、&lt;br &#x2F;&gt;
ダダをこねるようになってしまいました。&lt;&#x2F;p&gt;
&lt;p&gt;さて、具体的な使い方です。&lt;br &#x2F;&gt;
試しに下記のコマンドを打ってみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;tmux&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screen-Shot-2023-03-19-at-16.40.51.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな感じで、&lt;br &#x2F;&gt;
windowsの一覧が表示されていれば、tmuxが起動できています。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;strong&gt;tmux lsコマンドは、&lt;br &#x2F;&gt;
セッションの一覧を表示するコマンドです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(セッションについては、後で解説します)&lt;&#x2F;p&gt;
&lt;p&gt;Tmuxの設定ファイルは、&lt;br &#x2F;&gt;
~&#x2F;.tmux.confというもので、&lt;br &#x2F;&gt;
設定したら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;tmux&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; source-file ~&#x2F;.tmux.conf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で設定を読み込むことができます。&lt;&#x2F;p&gt;
&lt;p&gt;以下、細かい概念の解説や、&lt;br &#x2F;&gt;
設定について深掘りしていきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tmuxnogai-nian&quot;&gt;Tmuxの概念&lt;&#x2F;h2&gt;
&lt;p&gt;TmuxもVimと同じで、&lt;br &#x2F;&gt;
奥が深く、極めようとするとそこそこ学習コストがかかります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ただ、最低限便利なものを使うだけであれば、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そこまでハードルは高くありません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Tmuxの概念も、全部を覚えるよりは、&lt;br &#x2F;&gt;
必要最低限知っておけばおそらく十分かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;下記では、必要最低限知っておきたい概念を解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setusiyon&quot;&gt;セッション&lt;&#x2F;h3&gt;
&lt;p&gt;これは、平たく言うとウインドウの集合体のようなものです。&lt;br &#x2F;&gt;
イメージとしては、ターミナルのウインドウを複数開いているような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;先程、tmux lsコマンドを紹介しましたが、&lt;br &#x2F;&gt;
これはこのセッションを確認するコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screen-Shot-2023-03-19-at-16.40.51.png&quot; alt=&quot;tmux lsの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の画像だと、0セッション、&lt;br &#x2F;&gt;
3セッション、5セッションの3つのセッションがあることがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;セッション名は、それぞれ0、3、5ですね。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトだと、このように数字がセッション名になるので、&lt;br &#x2F;&gt;
ちょっとわかりにくいですよね。変更することもできます。&lt;&#x2F;p&gt;
&lt;p&gt;変更方法としては、いくつかありますが、&lt;br &#x2F;&gt;
&lt;strong&gt;よく使うのは、プレフィックスキー(後で解説します) + $です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これを押すと、&lt;br &#x2F;&gt;
下記のように名前を変更できるモードに入ります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screenshot-2023-09-14-at-9.23.36.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あとは、好きなセッション名を入力して&lt;br &#x2F;&gt;
エンターを押せば変更できます。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドで変更することも可能で、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;tmux&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; rename-session&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 古いセッション名 新しいセッション名&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じでも変更できます。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、プレフィックスキー + :でTmuxのコマンドを打つことができるモードに入れますが、&lt;br &#x2F;&gt;
そこで、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:rename-session&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nam&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でも変更できます。&lt;br &#x2F;&gt;
(ちなみに、:renameと省略することもできます)&lt;&#x2F;p&gt;
&lt;p&gt;使いやすいものを使えばいいかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;さて、こうしたセッションですが、&lt;br &#x2F;&gt;
Tmuxで一度に入ることができる(アタッチ)、セッションは一つのみです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;strong&gt;セッションを複数作っても、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そのターミナルに表示できるのは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;一つのセッションのみという特徴があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ターミナルのウインドウ集合体に似ているとはいえ、&lt;br &#x2F;&gt;
ターミナルのウインドウは、複数ひらっきぱなしにできますが、&lt;br &#x2F;&gt;
Tmuxは一つしかひらっきぱなしにできないので、&lt;br &#x2F;&gt;
(あくまで一つのターミナルウインドウに対してという意味)&lt;&#x2F;p&gt;
&lt;p&gt;ウインドウの集合体とは少々異なる側面もあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、セッションによって、&lt;br &#x2F;&gt;
例えば、セッション名 Rubyでは、&lt;br &#x2F;&gt;
Rubyの案件の環境を構築し、&lt;br &#x2F;&gt;
セッション名 Pythonでは、&lt;br &#x2F;&gt;
Pythonの案件の環境を構築し、&lt;br &#x2F;&gt;
分けることができるのが大きなメリットです。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyのセッションに接続しているときは、&lt;br &#x2F;&gt;
Pythonの環境は全く見えません。&lt;br &#x2F;&gt;
独立しているのがメリットですね。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、&lt;br &#x2F;&gt;
それぞれのプライベートターミナル環境を作っていくような感じです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;uindou&quot;&gt;ウインドウ&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、ウインドウです。&lt;&#x2F;p&gt;
&lt;p&gt;ややこしいのですが、Tmuxでのウインドウは、&lt;br &#x2F;&gt;
&lt;mark&gt;一般的なイメージのウインドウとは異なり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;タブのようなイメージです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;平たく言うとペインの集合体のようなものでして、&lt;br &#x2F;&gt;
ターミナルのタブを複数開いているというのが近い状態だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、一つの画面のような感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;ウインドウの一覧は、&lt;br &#x2F;&gt;
プレフィックスキー + wで確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screenshot-2023-09-14-at-9.39.19-1024x528.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、4windowあることが確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、VSCodeでファイルを開きすぎたときに、&lt;br &#x2F;&gt;
そうしたファイルの一覧がウインドウみたいな感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;ウインドウ名を変えたいときは、&lt;br &#x2F;&gt;
プレフィックスキー + ,で変更するモードに入れます。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトだと、zshのような、&lt;br &#x2F;&gt;
シェルの名前になっていることが多いかと思うので、&lt;br &#x2F;&gt;
気に入らなかったら変更しましょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pein&quot;&gt;ペイン&lt;&#x2F;h3&gt;
&lt;p&gt;これは、平たく言うと、ウインドウの中にある個々のターミナル画面のことです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;tmux&#x2F;Screenshot-2023-01-24-at-8.16.29-1024x547.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、このように、&lt;strong&gt;4分割された&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ターミナルがあるとすると、この4分割された一つ一つ、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;すなわち4つの画面がペインであり、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
このウインドウは4つのペインを持っているということになります。&lt;&#x2F;p&gt;
&lt;p&gt;中央下のstatus lineにある、&lt;br &#x2F;&gt;
1:zsh 2:zshとかは、ウインドウで、&lt;br &#x2F;&gt;
この4分割のやつは、ウインドウ3になります。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、セッションの場合は、&lt;br &#x2F;&gt;
4つのウインドウをもっていますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;atatuti&quot;&gt;アタッチ&lt;&#x2F;h3&gt;
&lt;p&gt;さて、Tmuxの画面に関する用語は、&lt;br &#x2F;&gt;
上記のような感じです。&lt;br &#x2F;&gt;
次に操作の用語です。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、アタッチですね。&lt;br &#x2F;&gt;
既に少し出てきましたが、&lt;br &#x2F;&gt;
&lt;mark&gt;これは、セッションに接続することを指します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最初にターミナルを開いた状態だと、&lt;br &#x2F;&gt;
tmuxに接続していないかと思うので、&lt;br &#x2F;&gt;
tmux lsで現在のセッションを確認して、&lt;br &#x2F;&gt;
入りたいセッションに対して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;tmux a -t セッション名&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を実行すると、そのセッションに接続して、&lt;br &#x2F;&gt;
いつものようにtmuxのステータスバーにお会いできるというわけです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;detatuti&quot;&gt;デタッチ&lt;&#x2F;h3&gt;
&lt;p&gt;これに対して、セッションから抜ける用語もあります。&lt;br &#x2F;&gt;
デタッチです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;デタッチとは、セッションを破壊することなく、セッションから抜けることです。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
本来であれば、プレフィックスキー + dでできますが、&lt;br &#x2F;&gt;
私の場合、そこまで頻繁にデタッチするわけではないので、&lt;br &#x2F;&gt;
画面分割のショットカットキーに割り当ててしまっています。&lt;&#x2F;p&gt;
&lt;p&gt;そのような場合、プレフィックスキー + dと打ってもデタッチできないので、&lt;br &#x2F;&gt;
プレフィックスキー + : detach-clientと入力してデタッチします。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、tmuxのメリットの一つとして、&lt;br &#x2F;&gt;
ターミナルクラッシュに強いというのがあります。&lt;&#x2F;p&gt;
&lt;p&gt;tmuxを使っていなければ、&lt;br &#x2F;&gt;
突然ターミナルがクラッシュした場合、&lt;br &#x2F;&gt;
カレントディレクトリの場所や、Neovimとかもすべて閉じられてしまいますが、&lt;br &#x2F;&gt;
tmuxだと、上記のクラッシュはデタッチになるので、&lt;br &#x2F;&gt;
開き直して、アタッチすれば、&lt;br &#x2F;&gt;
すぐ復元できるというメリットがあります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、デタッチに関しては、&lt;br &#x2F;&gt;
ターミナルを終了するでも、&lt;br &#x2F;&gt;
概ね似たような結果になるかなと思います。&lt;br &#x2F;&gt;
(ターミナルクラッシュに関して言えば、&lt;br &#x2F;&gt;
稀にセッションが吹き飛んで、復元できないこともないわけではないので過信は禁物だが)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;purehuitukusuki&quot;&gt;プレフィックスキー&lt;&#x2F;h3&gt;
&lt;p&gt;「さっきから、当然のようにプレフィックスキーって&lt;br &#x2F;&gt;
出てくるけど、これって何なん？」&lt;br &#x2F;&gt;
申し遅れました。説明していなかったですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;プレフィックスキーとは、tmuxの各種操作をする上で必要となるキーのことで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ショットカットみたいなものです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、Tmuxの場合、先程のデタッチのように、&lt;br &#x2F;&gt;
プレフィックスキー + 何かというのがほとんどで、&lt;br &#x2F;&gt;
プレフィックスキーと何を押すかで適用する操作を変えていきます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、このプレフィックスキーは、&lt;br &#x2F;&gt;
tmuxを使う上では一番操作するキーになるのですが、&lt;br &#x2F;&gt;
デフォルトだと、プレフィックスキーは、&lt;br &#x2F;&gt;
Ctrl + bになっています。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これはめちゃくちゃ押しづらいので、変更したほうが良いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;変更方法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; prefix C-s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;unbind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; C-b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このような記述を、tmuxの設定ファイルに書き込みます。&lt;&#x2F;p&gt;
&lt;p&gt;tmuxの設定ファイルは、ホームディレクトリ直下の、&lt;br &#x2F;&gt;
.tmux.confです。&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、プレフィックスキーをCtrl + sに変更しています。&lt;br &#x2F;&gt;
C-の部分は、Ctrlということですね。&lt;&#x2F;p&gt;
&lt;p&gt;Tmuxで最低限覚えておきたい概念は、&lt;br &#x2F;&gt;
これぐらいでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、使って覚えましょう。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tmuxtitosito&quot;&gt;Tmuxチートシート&lt;&#x2F;h2&gt;
&lt;p&gt;tmuxで頻繁に使う操作は、&lt;br &#x2F;&gt;
実はそこまで多くはないので、&lt;br &#x2F;&gt;
&lt;strong&gt;一旦、ここにあるやつだけ使うでも&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;かなり便利になります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;操作&lt;&#x2F;td&gt;&lt;td&gt;キーバインド&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;新規ウインドウの作成&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + c&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;次のウインドウに移動&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + n&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;前のウインドウに移動&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + p&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;指定した番号のウインドウに移動&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + ウインドウ番号&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ウインドウ一覧表示&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + w&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ウインドウ名変更&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + ,&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;コピーモード開始&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + [&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;デタッチ&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + : detach-client&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;セッション名変更&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + $&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;現在のペインを一時的に最大化(戻すときも同様のキー)&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + z&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;ペインのサイズ変更(上は-U、下は-D、右は-R、左は-L)&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + :resize-pane -U(D,R,L) 数字&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;サスペンド&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + Ctrl + z&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;時計を表示&lt;&#x2F;td&gt;&lt;td&gt;プレフィックスキー + t&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;あとは、ペイン関係のキーがありますが、&lt;br &#x2F;&gt;
デフォルトのキーバインドは、&lt;br &#x2F;&gt;
ちょっと押しづらいので、&lt;br &#x2F;&gt;
私は変更しています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; d split-window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -h&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; v split-window&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; s choose-tree&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -Zw&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; r source-file ~&#x2F;.tmux.conf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; \;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; display &amp;quot;Reloaded!&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;# vimのキーバインドでペインを移動します。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; h select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -L&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; j select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -D&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; k select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -U&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;bind&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; l select-pane&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -R&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;bind dは、プレフィックスキー + d&lt;&#x2F;strong&gt;のことで、&lt;br &#x2F;&gt;
上記の場合、縦に分割します。&lt;&#x2F;p&gt;
&lt;p&gt;bind vは横に分割し、&lt;br &#x2F;&gt;
bind sは、ウインドウ一覧を表示します。&lt;&#x2F;p&gt;
&lt;p&gt;bind rは、.tmux.confファイルを再読み込みします。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、vimのおなじみのキーバインドで、&lt;br &#x2F;&gt;
ペインを移動できるように設定しました。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;873&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vim&#x2F;NeoVimプラグイン】これだけは入れておきたいプラグイン10選</title>
        <published>2023-01-23T00:00:00+00:00</published>
        <updated>2023-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/plugin-recommend/"/>
        <id>https://reisuta.com/plugin-recommend/</id>
        
        <content type="html" xml:base="https://reisuta.com/plugin-recommend/">&lt;p&gt;プラグインをどれだけ入れるかは、&lt;br &#x2F;&gt;
その人の思想なども関係するので、&lt;br &#x2F;&gt;
一概にこれがいいというのはないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインを全く入れない人もいれば、&lt;br &#x2F;&gt;
100個以上入れる人もいます。&lt;&#x2F;p&gt;
&lt;p&gt;ただそれでも、&lt;strong&gt;これだけは入れておきたいプラグインというのも存在すると思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、そんなプラグインをいくつか紹介します。&lt;br &#x2F;&gt;
プラグインを使いこなせれば、冗談抜きでVSCodeを超えることもできます。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインに頼りすぎると、&lt;br &#x2F;&gt;
管理が複雑になったり、素のVimの機能を疎かにしてしまったりという、&lt;br &#x2F;&gt;
デメリットもありますが、使わないプラグインをいれすぎなければ、&lt;br &#x2F;&gt;
大丈夫だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Vimにプラグインを導入するのは、&lt;br &#x2F;&gt;
&lt;strong&gt;初めてという方は、まず本記事で紹介したプラグインを&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;導入してみるのをおすすめします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;puraguinnodao-ru-fang-fa&quot;&gt;プラグインの導入方法&lt;&#x2F;h2&gt;
&lt;p&gt;早速、プラグインを導入していきたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;導入方法としては、私は執筆時点では、&lt;br &#x2F;&gt;
vim-plugを使ってインストールをしています。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインマネージャーは色々あるので、&lt;br &#x2F;&gt;
vim-plugじゃないとだめということはありません。&lt;br &#x2F;&gt;
各々お好きなプラグインマネージャーをご使用ください。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインを導入するのが初めてで、&lt;br &#x2F;&gt;
プラグインマネージャーって？という方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nerdtree&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で、解説と導入方法を解説しているので、&lt;br &#x2F;&gt;
御覧ください。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;vimxi-nopuraguin&quot;&gt;Vim系のプラグイン&lt;&#x2F;h2&gt;
&lt;p&gt;さて、そんなプラグインですが、&lt;br &#x2F;&gt;
プラグインにも色々ありまして、&lt;br &#x2F;&gt;
主にVim scriptで書かれており、&lt;br &#x2F;&gt;
昔から使われている歴史の長いプラグイン。&lt;br &#x2F;&gt;
(私はこれらをVim系のプラグインと呼んでいます)&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、ここ数年で登場し、&lt;br &#x2F;&gt;
リッチな操作性やモダンなUIが魅力の、&lt;br &#x2F;&gt;
lua製のプラグイン。&lt;br &#x2F;&gt;
(私はこれらは、Neovim系のプラグインと呼んでいます。)&lt;&#x2F;p&gt;
&lt;p&gt;一概にどちらがいいということは、&lt;br &#x2F;&gt;
ありません。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、パフォーマンス面では、&lt;br &#x2F;&gt;
Neovim系が、安定感ではVim系に&lt;br &#x2F;&gt;
軍配があがることが多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;同じようなことを実現するプラグインにも、&lt;br &#x2F;&gt;
種類が色々あったりするので、&lt;br &#x2F;&gt;
自分が最もしっくりくるプラグインを見つけられるのがベストですよね。&lt;&#x2F;p&gt;
&lt;p&gt;大まかに私が考えるプラグインの種類としては、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;ポイント&quot; webicon=&quot;st-svg-check-circle&quot; color=&quot;#FFD54F&quot; bordercolor=&quot;#FFD54F&quot; bgcolor=&quot;#FFFDE7&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ファイラー系(代表例 NERDTree、Fern、Telescope.nvim)&lt;&#x2F;li&gt;
&lt;li&gt;文法系 (代表例 coc.nvim、nvim-treesitter&lt;&#x2F;li&gt;
&lt;li&gt;ファイル検索系(代表例 Unite.vim、Ctrlp.vim、Telescope.nvim)&lt;&#x2F;li&gt;
&lt;li&gt;見た目系プラグイン(代表例 ScrollColors、Winresizer.vim、tokyonight.nvim)&lt;&#x2F;li&gt;
&lt;li&gt;Git系 (代表例 vim-fugitive、gitsigns.nvim)&lt;&#x2F;li&gt;
&lt;li&gt;ターミナル系プラグイン (代表例 toggleterm.nvim、vim-quickrun)&lt;&#x2F;li&gt;
&lt;li&gt;その他便利系 (代表例 vim-commentary、open-browser.vim)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;このような感じですかね。&lt;&#x2F;p&gt;
&lt;p&gt;ジャンルの分け方は、&lt;br &#x2F;&gt;
人によって違う気もしますが、&lt;br &#x2F;&gt;
私の場合は、だいたい上記のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、上記のジャンルのプラグインを一つずつ設定していけば、&lt;br &#x2F;&gt;
VSCodeは簡単に超えられると思います。&lt;&#x2F;p&gt;
&lt;p&gt;下記で、いくつかまずは、&lt;br &#x2F;&gt;
Vim系のプラグインをご紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nerdtree&quot;&gt;NERDTree&lt;&#x2F;h3&gt;
&lt;p&gt;前回の記事を御覧頂いた方は、&lt;br &#x2F;&gt;
またかよって感じかもしれませんが、&lt;br &#x2F;&gt;
&lt;strong&gt;すみません、また&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;NERDTreeです。&lt;&#x2F;p&gt;
&lt;p&gt;下記の記事で詳細に解説しました。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;93&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;詳細は、上記の記事に&lt;br &#x2F;&gt;
譲りますが、ファイラー系プラグインの中では、&lt;br &#x2F;&gt;
私はもっとも気に入っています。&lt;&#x2F;p&gt;
&lt;p&gt;FernやNeovim系でも、&lt;br &#x2F;&gt;
良いプラグインはたくさんあるのですが、&lt;br &#x2F;&gt;
私は、NERDTreeの操作性に馴染みすぎてしまったのと、&lt;br &#x2F;&gt;
今更移行するのが面倒なので、&lt;br &#x2F;&gt;
NERDTreeを使っています。&lt;&#x2F;p&gt;
&lt;p&gt;Vim系プラグインでは、自信を持っておすすめできます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;unite-vim&quot;&gt;Unite.vim&lt;&#x2F;h3&gt;
&lt;p&gt;1つ目は、unite.vimというプラグインです。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Shougo&#x2F;unite.vim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;Shougo&#x2F;unite.vim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、結構有名なプラグインで、&lt;br &#x2F;&gt;
統合ユーザーインターフェースと呼ばれることが多い、&lt;br &#x2F;&gt;
要はなんでもできるプラグインです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#begin&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;Shougo&#x2F;unite.vim.git&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#end&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; un :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite buffer&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; unf :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ufr :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite file_rec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ub :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite bookmark&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; umru :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite file_mru&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ur :&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Unite&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -buffer-name=register&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; register&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;使用頻度が高いのは、&lt;br &#x2F;&gt;
上記でのUnite bufferコマンドで、&lt;br &#x2F;&gt;
これは、バッファー一覧を表示してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;Screenshot-2023-01-21-at-21.57.09-1024x965.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;画面上部に表示されている&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これの何が便利かいうと、&lt;br &#x2F;&gt;
&lt;strong&gt;一度開いたファイルなどを、&lt;br &#x2F;&gt;
簡単に開き直すことができる点にあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これにより、複数のファイルの行き来が楽になるので、&lt;br &#x2F;&gt;
一気にIDE感が出てきます。&lt;&#x2F;p&gt;
&lt;p&gt;Unite.vimの設定は、結構奥が深く、&lt;br &#x2F;&gt;
こんなのはまだ序の口です。&lt;br &#x2F;&gt;
だが、その序の口のレベルでも格段に便利になるので、&lt;br &#x2F;&gt;
必須のプラグインと言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Unite.vimを極めたい人は、&lt;br &#x2F;&gt;
ぜひ本家のリポジトリのコードを熟読してみてください。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、最近は更新が止まっているっぽいので、&lt;br &#x2F;&gt;
その点は、少々残念なところですね。&lt;&#x2F;p&gt;
&lt;p&gt;Neovim系のtelescope.nvimでも、&lt;br &#x2F;&gt;
Unite.vimと似たようなことができるので、&lt;br &#x2F;&gt;
最近は、こちらを採用している人も、&lt;br &#x2F;&gt;
増えてきている気がしますね。&lt;br &#x2F;&gt;
(まあ、両方使うとかでもいいと思いますよ)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vim-commentary&quot;&gt;Vim-commentary&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、vim-commentaryです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、&lt;mark&gt;選択した行とかをコメントアウトできるという、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;シンプルなプラグインです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-commentary&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-commentary&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;シンプル故に使いやすいです。&lt;br &#x2F;&gt;
基本は、ノーマルモードでgccでコメントアウトし、&lt;br &#x2F;&gt;
ビジュアルモードとかでgcで選択範囲を一気にコメントアウトできます。&lt;&#x2F;p&gt;
&lt;p&gt;細かい使い方の説明は、こちらを御覧ください&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-commentary&#x2F;blob&#x2F;master&#x2F;doc&#x2F;commentary.txt&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-commentary&#x2F;blob&#x2F;master&#x2F;doc&#x2F;commentary.txt&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;多くの言語に対応してはいるのですが、&lt;br &#x2F;&gt;
たまにVue.jsとかみたいにjsとhtmlが混ざったようなパターンとかだと、&lt;br &#x2F;&gt;
上手く置換してくれなかったりします。&lt;&#x2F;p&gt;
&lt;p&gt;その場合は、プラグインに頼るというより、&lt;br &#x2F;&gt;
Vimのマクロとかを使えば解決できるので、&lt;br &#x2F;&gt;
まあ大きな問題というわけではないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、マクロについては、&lt;br &#x2F;&gt;
下記の記事で解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;873&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;なんだかんだで、&lt;br &#x2F;&gt;
普段使うプログラミング言語って、&lt;br &#x2F;&gt;
多くても3 ~ 6種類ぐらいかと思うので、&lt;br &#x2F;&gt;
&lt;mark&gt;それぐらいのパターンであれば、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;自分でマクロとか関数を組んでしまうということも正直可能かと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、このプラグインについては、&lt;br &#x2F;&gt;
必須で導入したいというほどのものではないのですが、&lt;&#x2F;p&gt;
&lt;p&gt;コード量も少なく、&lt;br &#x2F;&gt;
Vim scriptの参考リポジトリとしても&lt;br &#x2F;&gt;
使えると思ったので、ご紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;Vue.jsとかでうまく補完されないとは言いつつも、&lt;br &#x2F;&gt;
それでもほとんどの場合これで十分で、&lt;br &#x2F;&gt;
コメントアウトに関してはもうVSCodeと遜色ない感じになるかと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ctrlp-vim&quot;&gt;Ctrlp.vim&lt;&#x2F;h3&gt;
&lt;p&gt;これは、VSCodeでいう、&lt;br &#x2F;&gt;
command + pでできるファイル検索ツールみたいなものです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ctrlpvim&#x2F;ctrlp.vim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;ctrlpvim&#x2F;ctrlp.vim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もともとVSCode出身の人は、&lt;br &#x2F;&gt;
あの検索を必ずやっているかと思うので、&lt;br &#x2F;&gt;
Vimでも似たような機能はほしいと思うはずです。&lt;&#x2F;p&gt;
&lt;p&gt;正直、似たようなことは、&lt;br &#x2F;&gt;
telescope.nvimでもできるのですが、&lt;br &#x2F;&gt;
シンプルなVim系プラグインとしては、&lt;br &#x2F;&gt;
このCtrlp.vimもおすすめです。&lt;br &#x2F;&gt;
(telescope.nvim強すぎる)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ノーマルモードでCtrl + pを押せば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;起動し、早速検索できます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;Screenshot-2023-05-26-at-22.44.34.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えばviewと検索してみたら、このように表示されました。&lt;&#x2F;p&gt;
&lt;p&gt;起動して、ctrl + fとかを押すと、&lt;br &#x2F;&gt;
検索対象をバッファーとかに切り替えられるので、&lt;br &#x2F;&gt;
先程のUnite.vimと似たようなこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;概ね使いやすいプラグインでは、ありますが、&lt;br &#x2F;&gt;
稀に新規で作成したばっかのファイルとかは、&lt;br &#x2F;&gt;
検索対象に出てこなかったりするので、&lt;br &#x2F;&gt;
その辺は、少々物足りないかもしれないですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;winresizer-vim&quot;&gt;Winresizer.vim&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、winresizer.vimです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、シンプルなプラグインで、&lt;br &#x2F;&gt;
ウインドウのサイズ調整を簡単にできるプラグインです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;simeji&#x2F;winresizer&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;simeji&#x2F;winresizer&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もともと、Vimはシンプルなことをやるエディタで、&lt;br &#x2F;&gt;
UNIXの思想も、小さいソフトウェアのような感じなので、&lt;br &#x2F;&gt;
このような機能が限定的なプラグインは、&lt;br &#x2F;&gt;
ある意味本流のような気もします。&lt;&#x2F;p&gt;
&lt;p&gt;それにVimの場合、&lt;br &#x2F;&gt;
GUIエディタじゃないので、&lt;br &#x2F;&gt;
こういう画面幅を調整するって、&lt;br &#x2F;&gt;
地味に苦戦するんですよね。&lt;br &#x2F;&gt;
(VSCodeだと、マウスでぐにゅっとするだけなので、&lt;br &#x2F;&gt;
ここに関しては、VSCodeのほうが優れています。)&lt;&#x2F;p&gt;
&lt;p&gt;なので、たかがウインドウサイズの調整、&lt;br &#x2F;&gt;
されど、ウインドウサイズの調整という感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ウインドウサイズの調整をバカにする者は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ウインドウサイズの調整に泣きます。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(私です。上司とペアプロしているとき、画面幅の調整の仕方が&lt;br &#x2F;&gt;
分からず爆死しました。その日は家で大泣きしました。)&lt;&#x2F;p&gt;
&lt;p&gt;さて、使い方ですが、&lt;br &#x2F;&gt;
&lt;mark&gt;デフォルトだと、Ctrl + Eで起動し、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そのまま、j,k,l,hとおなじみのvimの方向キーマップで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;直感的にサイズ調整できます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;Screenshot-2023-01-23-at-18.37.58-1024x520.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな感じに、VSCodeみたいな、&lt;br &#x2F;&gt;
2ファイル開いて、下にターミナルみたいな構成も、&lt;br &#x2F;&gt;
ラクラク実現可能になります。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、このVSCodeのような、&lt;br &#x2F;&gt;
UIは、toggletermというターミナルのプラグインと、&lt;br &#x2F;&gt;
素のvimのvsコマンドとかでも実現できます。&lt;&#x2F;p&gt;
&lt;p&gt;これで、VSCode勢に絡まれても、&lt;br &#x2F;&gt;
「わいだって、VSCode構成できるもん」って&lt;br &#x2F;&gt;
対抗できますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vim-indent-guides&quot;&gt;Vim-indent-guides&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、vim-indent-guidesです。&lt;&#x2F;p&gt;
&lt;p&gt;こちらもシンプルで、&lt;br &#x2F;&gt;
インデントを見やすくしてくれるプラグインです。&lt;br &#x2F;&gt;
(さっきからシンプル系しか紹介していないですね。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nathanaelkane&#x2F;vim-indent-guides&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;nathanaelkane&#x2F;vim-indent-guides&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;IndentGuidesEnableみたいなコマンドを打つことで、&lt;br &#x2F;&gt;
見やすくしてくれますが、&lt;br &#x2F;&gt;
基本的に常時オンにしておいたほうがいいと思うので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; g:indent_guides_enable_on_vim_startup =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を記述して、vim起動時に有効になるようにしておくと便利です。&lt;&#x2F;p&gt;
&lt;p&gt;こういうインデント系のプラグインも、&lt;br &#x2F;&gt;
色々あるので、これが必ず良いというわけではありません。&lt;&#x2F;p&gt;
&lt;p&gt;最近は、Neovim系の方でも、&lt;br &#x2F;&gt;
良いプラグインが出てきているので、&lt;br &#x2F;&gt;
そっちを使うのもありだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、良くも悪くも、&lt;br &#x2F;&gt;
Neovim系のプラグインは、&lt;br &#x2F;&gt;
Vimでは使えないかと思うので、&lt;br &#x2F;&gt;
&lt;strong&gt;Vim script製で同じことが実現できるプラグインを知っておくことも&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;悪くはないと思い、紹介しました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;(試しに、toggleterm.nvimを.vimrcに導入してみましたが、&lt;br &#x2F;&gt;
そもそもlua 記法が.vimrcでは使えないので、&lt;br &#x2F;&gt;
設定を読み込めずに使えませんでした。&lt;br &#x2F;&gt;
なので、lua記法の設定が不要なプラグインなら、&lt;br &#x2F;&gt;
もしかしたら使えるものもあるかも？いずれにしろ、&lt;br &#x2F;&gt;
ベースがluaなので、何かと厳しそうですが。基本は使えないと&lt;br &#x2F;&gt;
思っていた方が良さそうです。相性が悪いのは間違いないです。&lt;br &#x2F;&gt;
ただ、絶対に使えないというわけではない気もしていて、&lt;br &#x2F;&gt;
何らかのやり方はあるのかもしれないです。)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neovimxi-nopuraguin&quot;&gt;Neovim系のプラグイン&lt;&#x2F;h2&gt;
&lt;p&gt;Vim系のプラグインをいくつか紹介したので、&lt;br &#x2F;&gt;
お次にNeovim系をいくつかご紹介したいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;Neovimの一つの大きなメリットとして、&lt;br &#x2F;&gt;
&lt;strong&gt;Neovim製のプラグインも使えるということがあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;当たり前だろって思うかもしれませんが、&lt;br &#x2F;&gt;
先述のように、Vimではtoggleterm.nvimとかは&lt;br &#x2F;&gt;
使えません。&lt;&#x2F;p&gt;
&lt;p&gt;けれどもNeovimなら、上記でご紹介した、&lt;br &#x2F;&gt;
Vim scriptベースのVim系プラグインはすべて使用できます。&lt;br &#x2F;&gt;
(極稀にVimでしか使えないVim系プラグインもありますが、&lt;br &#x2F;&gt;
かなり少ないです。)&lt;&#x2F;p&gt;
&lt;p&gt;なので、プラグインについては、&lt;br &#x2F;&gt;
正直Neovimの方に軍配が上がります。&lt;&#x2F;p&gt;
&lt;p&gt;このようなNeovimとVimの違いについては、&lt;br &#x2F;&gt;
下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;172&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;telescope-nvim&quot;&gt;Telescope.nvim&lt;&#x2F;h3&gt;
&lt;p&gt;Neovim系で、最初にご紹介するのは、&lt;br &#x2F;&gt;
telescope.nvimです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvim-telescope&#x2F;telescope.nvim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;nvim-telescope&#x2F;telescope.nvim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、完全にチートプラグインで、&lt;br &#x2F;&gt;
Neovimを乗っ取ります&lt;&#x2F;p&gt;
&lt;p&gt;このプラグインでできないことを探すことの方が難しい、&lt;br &#x2F;&gt;
&lt;strong&gt;数々の他のプラグインを葬ってきた、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;万能型プラグインです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、このレベルのプラグインは、&lt;br &#x2F;&gt;
私の管見ではVim系には存在しない気がするので、&lt;br &#x2F;&gt;
これを入れるためだけにNeovimを使うのも有りだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、あまりにいろんなことをやりすぎていて、&lt;br &#x2F;&gt;
シンプルなことをやる、小さいソフトウェアである、&lt;br &#x2F;&gt;
UNIX的思想から外れまくっているので、&lt;br &#x2F;&gt;
生粋のVim教徒の方は、邪道と感じるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;実際に、こういうのばっか使っていると、&lt;br &#x2F;&gt;
Vimのマクロとか、素のVimに搭載されている機能とかも&lt;br &#x2F;&gt;
使わなくなっていく気もします。&lt;&#x2F;p&gt;
&lt;p&gt;そう考えると、文字通り、&lt;br &#x2F;&gt;
Vimを乗っ取る可能性があるプラグインなので、&lt;br &#x2F;&gt;
恐ろしいですね。&lt;&#x2F;p&gt;
&lt;p&gt;「は、Vimの思想なんかどうだっていいよ、&lt;br &#x2F;&gt;
便利ならいいだろ」っていう方も&lt;br &#x2F;&gt;
多いと思うので、その場合は、&lt;br &#x2F;&gt;
ガンガン使いましょう。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、下記の動画で、&lt;br &#x2F;&gt;
telescope.nvimのハンズオンをしています。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;scMgWEc-7iY&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;今まで紹介してきた、&lt;br &#x2F;&gt;
unite.vimとかctrlp.vimはなんだったんだって思わせるぐらいの&lt;br &#x2F;&gt;
破壊力ですよね...&lt;&#x2F;p&gt;
&lt;h3 id=&quot;coc-nvim&quot;&gt;coc.nvim&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、coc.nvimです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neoclide&#x2F;coc.nvim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;neoclide&#x2F;coc.nvim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これもtelescope.nvimに負けておりません。&lt;&#x2F;p&gt;
&lt;p&gt;文法系プラグインの最高峰です。&lt;br &#x2F;&gt;
Vimは、VSCodeとかに比べると、&lt;br &#x2F;&gt;
文法の補完がいまいちと言われがちですが、&lt;br &#x2F;&gt;
coc.nvimを入れれば、そんなことは言わせません。&lt;&#x2F;p&gt;
&lt;p&gt;デメリットは、設定が難しいことです。&lt;&#x2F;p&gt;
&lt;p&gt;巨大なプラグインなので、&lt;br &#x2F;&gt;
使いこなすのは簡単ではありません。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScript環境のCoc.nvimでの構築は、&lt;br &#x2F;&gt;
下記の記事で詳細に解説しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&#x2F;items&#x2F;725e3d88a48b09376dd1&quot;&gt;https:&#x2F;&#x2F;qiita.com&#x2F;reisuta&#x2F;items&#x2F;725e3d88a48b09376dd1&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、私もまだ完全に使いこなせているわけではありません。&lt;br &#x2F;&gt;
機能が多すぎます。&lt;&#x2F;p&gt;
&lt;p&gt;恐ろしや。けれども便利なので、&lt;br &#x2F;&gt;
いれてしまうんですよね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;toggleterm-nvim&quot;&gt;toggleterm.nvim&lt;&#x2F;h3&gt;
&lt;p&gt;恐ろしいプラグインが続いたので、&lt;br &#x2F;&gt;
少々シンプルなプラグインを紹介します。&lt;br &#x2F;&gt;
(それでもまあまあ多機能)&lt;&#x2F;p&gt;
&lt;p&gt;toggleterm.nvimです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;これは、Neovimを開いている際に、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ターミナルを簡単に召喚できるプラグインです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;個人的には、こういうプラグインをずっと探していたので、&lt;br &#x2F;&gt;
初めて見つけたときは、感動しました。&lt;&#x2F;p&gt;
&lt;p&gt;これで、Neovimで開発しているときに、&lt;br &#x2F;&gt;
いちいちTmuxの別のペインに移動しなくても良くなりますね。&lt;&#x2F;p&gt;
&lt;p&gt;Railsとかだと、やれRubocopだ、Rspecだ、&lt;br &#x2F;&gt;
Gitだと、実行するコマンドが地味に色々あるので、&lt;br &#x2F;&gt;
サクッと召喚して実行できるプラグインは、&lt;br &#x2F;&gt;
ものすごく便利です。&lt;&#x2F;p&gt;
&lt;p&gt;詳細な解説は、下記の動画でハンズオンしているので、&lt;br &#x2F;&gt;
ぜひとも御覧ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;mGHeL5-qJQc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gitsigns-nvim&quot;&gt;gitsigns.nvim&lt;&#x2F;h3&gt;
&lt;p&gt;お次は、gitsigns.nvimです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lewis6991&#x2F;gitsigns.nvim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;lewis6991&#x2F;gitsigns.nvim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、文字通り、&lt;br &#x2F;&gt;
Git系のプラグインでして、&lt;br &#x2F;&gt;
&lt;mark&gt;差分を色付きで見やすくしてくれたりと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;VSCodeで当たり前にやっていることを&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Vimでもできるようにするプラグインです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;個人的なイチオシ、Git blameの常時表示ができるので、&lt;br &#x2F;&gt;
かなり便利だなと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;こちらについても、&lt;br &#x2F;&gt;
詳細なハンズオンは、&lt;br &#x2F;&gt;
下記の動画でご紹介しております。&lt;&#x2F;p&gt;
&lt;p&gt;このプラグインについては、&lt;br &#x2F;&gt;
割と詳細に解説しているので、&lt;br &#x2F;&gt;
ぜひとも御覧ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;i5sdInmcvqU&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zhui-ji-barbar-nvim&quot;&gt;追記: barbar.nvim&lt;&#x2F;h3&gt;
&lt;p&gt;こちら、追記プラグインです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;romgrk&#x2F;barbar.nvim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;romgrk&#x2F;barbar.nvim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、タブを見やすくしてくれるプラグインです。&lt;&#x2F;p&gt;
&lt;p&gt;オプションでgitsigns.nvimなどを入れると、&lt;br &#x2F;&gt;
Gitのハイライトなどを加えることもできます。&lt;&#x2F;p&gt;
&lt;p&gt;README.mdによると、&lt;br &#x2F;&gt;
いつものように、vim-plugなどでインストールすれば、&lt;br &#x2F;&gt;
良さそうです。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、公式に載っているマッピングだと、&lt;br &#x2F;&gt;
一部機能しないものがありました。&lt;&#x2F;p&gt;
&lt;p&gt;どうも&amp;lt;A-1&amp;gt;とかを&amp;lt;C-1&amp;gt;とかに修正しても反映されなかったのですが、&lt;br &#x2F;&gt;
他の、&amp;lt;C-t&amp;gt;とかはしっかり有効になっているので、&lt;br &#x2F;&gt;
現状、この不具合はまだよくわかっておりません（プラグイン側のエラー?)&lt;&#x2F;p&gt;
&lt;p&gt;lua製のプラグインなので、&lt;br &#x2F;&gt;
vim-scriptベースではなく、&lt;br &#x2F;&gt;
luaで書き直したら解決する不具合かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&amp;lt;A-とかではなく、&lt;br &#x2F;&gt;
bufのように、シンプルなキーにしたら、&lt;br &#x2F;&gt;
反映されました。&lt;&#x2F;p&gt;
&lt;p&gt;プラグイン自体は、素晴らしいので、&lt;br &#x2F;&gt;
この不具合は解決したいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vimyaneovimwoji-merutameni&quot;&gt;VimやNeovimを極めるために&lt;&#x2F;h3&gt;
&lt;p&gt;VimやNeovimを本格的に勉強するのにおすすめの&lt;br &#x2F;&gt;
書籍を紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;Vimの本はあまり多くありませんが、&lt;br &#x2F;&gt;
これらの本を読むと、&lt;br &#x2F;&gt;
新しい発見があったりするので、&lt;br &#x2F;&gt;
Vimを極めたい人にはおすすめです。&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000001734574.jpg&quot; alt=&quot;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%AE%9F%E8%B7%B5Vim%E3%80%80%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86%EF%BC%81%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20Drew%E3%80%80Neil%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;6e08bf5776463bf5a3cbc33848706e1f&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784774147956.jpg&quot; alt=&quot;【中古】Vimテクニックバイブル 作業効率をカイゼンする150の技 &amp;#x2F;技術評論社&amp;#x2F;Vimサポ-タ-ズ（単行本（ソフトカバー））&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;【中古】Vimテクニックバイブル 作業効率をカイゼンする150の技 &amp;#x2F;技術評論社&amp;#x2F;Vimサポ-タ-ズ（単行本（ソフトカバー））&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%80%90%E4%B8%AD%E5%8F%A4%E3%80%91Vim%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB%20%E4%BD%9C%E6%A5%AD%E5%8A%B9%E7%8E%87%E3%82%92%E3%82%AB%E3%82%A4%E3%82%BC%E3%83%B3%E3%81%99%E3%82%8B150%E3%81%AE%E6%8A%80%20%2F%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE%2FVim%E3%82%B5%E3%83%9D-%E3%82%BF-%E3%82%BA%EF%BC%88%E5%8D%98%E8%A1%8C%E6%9C%AC%EF%BC%88%E3%82%BD%E3%83%95%E3%83%88%E3%82%AB%E3%83%90%E3%83%BC%EF%BC%89%EF%BC%89&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;vaboo&amp;#x2F;va7958414477u20&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297111694.jpg&quot; alt=&quot;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Vim%20%5B%20Ruslan%20Osipov%20%E8%91%97%E3%80%81%E5%A4%A7%E5%80%89%20%E9%9B%85%E5%8F%B2%20%E8%A8%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16278398&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vim&#x2F;Neovimキーマップ】map&#x2F;noremapやLeaderキー</title>
        <published>2023-01-20T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/map-command/"/>
        <id>https://reisuta.com/map-command/</id>
        
        <content type="html" xml:base="https://reisuta.com/map-command/">&lt;p&gt;VimやNeovimを使っていくにあたって、&lt;br &#x2F;&gt;
どのようなキーマップを設定するかは、&lt;br &#x2F;&gt;
その人の個性であり、答えのない探求です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;それぐらい、キーマップの設定は、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Vimを使いこなす上で必須の設定と言えます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;しかし、そうした探求をするためにも、&lt;br &#x2F;&gt;
そもそもどのようにしてキーマップを設定するのか知る必要があるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;本記事では、.vimrcやinit.vimのキーマップの設定方法は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
もちろん、map系やのnoremap系など基本的なマッピングの種類についても解説します。&lt;&#x2F;p&gt;
&lt;p&gt;また、キーマップを設定する上で、&lt;strong&gt;Leaderキー&lt;&#x2F;strong&gt;というものを設定することも&lt;br &#x2F;&gt;
多いので、そちらについても併せて解説します。&lt;&#x2F;p&gt;
&lt;p&gt;それ以外にも、&lt;strong&gt;ユーザ定義コマンドなど、短縮入力に役立つ設定方法も解説します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;記事ではなく、動画で視聴したいという人は、&lt;br &#x2F;&gt;
下記が本記事の該当動画です。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;9bpwA1TfHmI&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;また、Vimの基本的な操作がまだ良くわからないという人や、&lt;br &#x2F;&gt;
これからVimに入門するという人は、&lt;br &#x2F;&gt;
下記の動画でVimについて完全解説しているので、&lt;br &#x2F;&gt;
よろしければご覧ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;vimyaneovimnomatupingunozhong-lei&quot;&gt;VimやNeovimのマッピングの種類&lt;&#x2F;h2&gt;
&lt;p&gt;VimやNeovimには、&lt;br &#x2F;&gt;
マッピングコマンドが複数存在しています。&lt;&#x2F;p&gt;
&lt;p&gt;そして、意外と複雑です。&lt;br &#x2F;&gt;
軽く表にまとめてみますと、下記のようになります。&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;map系&lt;&#x2F;td&gt;&lt;td&gt;noremap系&lt;&#x2F;td&gt;&lt;td&gt;モード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;map&lt;&#x2F;td&gt;&lt;td&gt;noremap&lt;&#x2F;td&gt;&lt;td&gt;ノーマルモード、ビジュアルモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;nmap&lt;&#x2F;td&gt;&lt;td&gt;nnoremap&lt;&#x2F;td&gt;&lt;td&gt;ノーマルモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;vmap&lt;&#x2F;td&gt;&lt;td&gt;vnoremap&lt;&#x2F;td&gt;&lt;td&gt;ビジュアルモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;imap&lt;&#x2F;td&gt;&lt;td&gt;inoremap&lt;&#x2F;td&gt;&lt;td&gt;インサートモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;cmap&lt;&#x2F;td&gt;&lt;td&gt;cnoremap&lt;&#x2F;td&gt;&lt;td&gt;コマンドラインモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;tmap&lt;&#x2F;td&gt;&lt;td&gt;tnoremap&lt;&#x2F;td&gt;&lt;td&gt;ターミナルモード&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;上記の表の説明としては、&lt;br &#x2F;&gt;
&lt;mark&gt;mapとか、noremapというのがコマンドであり、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;それぞれ、表に対応するモードにおいて、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;設定したマッピングが有効になるという感じです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tt i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;と設定すると、&lt;br &#x2F;&gt;
ノーマルモードか、ビジュアルモードのどちらかで、&lt;br &#x2F;&gt;
ttと入力すると、iが入力されたことになるという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;この文法自体は、他のマッピングコマンドでも同様で、&lt;br &#x2F;&gt;
&lt;strong&gt;左に入力するもの、右に実行するものという風にします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;※ちなみに、上記の表はやや簡易版で、他のモードとして選択、オペレータ待機などが&lt;br &#x2F;&gt;
ありますが、使用頻度は高くない気がしたので、省略しています。気になる人は、&lt;br &#x2F;&gt;
こちらのサイトが詳しいので参考にしてください。&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vim-jp.org&#x2F;vimdoc-ja&#x2F;map.html&quot;&gt;map - Vim日本語ドキュメント (vim-jp.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mapxi-tonoremapxi-nowei-i&quot;&gt;map系とnoremap系の違い&lt;&#x2F;h2&gt;
&lt;p&gt;さて、説明ではmapで説明しましたが、&lt;br &#x2F;&gt;
例えばmapコマンドには、対応するものとして、&lt;br &#x2F;&gt;
noremapがありました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;これらの違いは、再帰的なマッピングかどうかということです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;はい、これじゃ意味分かんないですよね。&lt;br &#x2F;&gt;
具体例をあげると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; o i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ss o &amp;quot; ssを入力するとiが入力されたことになり、挿入モードに&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap o i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ss o &amp;quot; ssを入力するとoが入力されたことになり、新しい行を追加し挿入モードに&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;つまり、&lt;strong&gt;map系の場合、&lt;br &#x2F;&gt;
実行コマンドのマッピングも再帰的にたどっていくのに対し、&lt;br &#x2F;&gt;
noremap系は辿らず、設定されたコマンド文字通りの意味で解釈されるということですね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;おそらく、noremap系の方が挙動としては直感的だと思うので、&lt;br &#x2F;&gt;
基本的には、noremap系を使えばいいかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私の感覚では、このmapとnoremapの特徴の違いをクリティカルに利用して、&lt;br &#x2F;&gt;
キーマップの設定をする機会は、あまりない気がするので、&lt;br &#x2F;&gt;
&lt;mark&gt;ややこしければ、片方だけ使うとかでも良いと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matupingunoshe-ding-li&quot;&gt;マッピングの設定例&lt;&#x2F;h3&gt;
&lt;p&gt;試しにマッピングの設定例について、&lt;br &#x2F;&gt;
紹介したいと思います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; { {}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;LEF&lt;&#x2F;span&gt;&lt;span&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; [ []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;LEFT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; ( ()&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot; &amp;quot;&amp;quot;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap &amp;#39; &amp;#39;&amp;#39;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap jj &amp;lt;ESC&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;ESC&amp;gt;&amp;lt;ESC&amp;gt; :nohlsearch&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ss ^&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ;; $&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;C-t&amp;gt; :NERDTreeToggle&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&amp;lt;LEFT&amp;gt;は、矢印キーで、&lt;br &#x2F;&gt;
&amp;lt;Up&amp;gt;,&amp;lt;Down&amp;gt;,&amp;lt;Right&amp;gt;などもあります。&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、{ などと入力したあと、{}の左矢印なので、&lt;br &#x2F;&gt;
{}の中に入るという感じだ。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;つまり、{ と入力したら、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;自動的に閉じカッコも補完するようにするマッピングという感じですね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&amp;lt;C-t&amp;gt;は、Control + tで、&lt;br &#x2F;&gt;
&amp;lt;CR&amp;gt;はenterです。&lt;&#x2F;p&gt;
&lt;p&gt;&amp;lt;C-でControlを表すので、&lt;br &#x2F;&gt;
たとえば、&amp;lt;C-s&amp;gt;とかは、&lt;br &#x2F;&gt;
Control + sになります。&lt;&#x2F;p&gt;
&lt;p&gt;このあたりは、NerdTreeの解説のときにも説明したので、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nerdtree&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;も参考にしていただけると。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;93&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;現時点では、まだ10行ほどですが、&lt;br &#x2F;&gt;
プラグインを導入した際などは、&lt;br &#x2F;&gt;
いやでもキーマップを設定したくなると思うので、&lt;br &#x2F;&gt;
キーマップの設定は徐々に増えていくでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;自分だけのカスタムキーマップを定義してみてください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;leaderkitoyuzading-yi-komando&quot;&gt;Leaderキーとユーザー定義コマンド&lt;&#x2F;h2&gt;
&lt;p&gt;上記で、基本的なキーマップについて、&lt;br &#x2F;&gt;
紹介しましたが、今度は上記以外で、&lt;br &#x2F;&gt;
キー入力を楽にする手伝いをしてくれるものを&lt;br &#x2F;&gt;
2つ紹介します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;leaderki&quot;&gt;Leaderキー&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;mark&gt;Leaderキーとは、自分で好きなキーを設定して、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;マッピング定義などの際に使用できる、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;いわばカスタムキーのようなものです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;leade&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;p i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という風にして、&lt;br &#x2F;&gt;
設定の自由度を上げることができます。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトでは、Leaderキーはバックスラッシュ( \ )ですが、&lt;br &#x2F;&gt;
めちゃくちゃ押しづらいので、基本変更するでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;変更の仕方としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mapleader = &amp;quot;\&amp;lt;space&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;この場合、spaceキーがleaderキーに割り当てられます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これで、上記のマッピングでは、&lt;br &#x2F;&gt;
spaceキーとpで挿入モードに入ることになります。&lt;&#x2F;p&gt;
&lt;p&gt;Leader キーにどのキーが設定されているか調べたいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;:echo mapleader&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でも確認できます。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトのままで、何も設定していない場合は、&lt;br &#x2F;&gt;
undefined variable mapleaderのようなエラーが出るかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;上記のように、spaceキーにLeaderキーを設定した場合は、&lt;br &#x2F;&gt;
echo 空白のような感じになるので、実際にはなにも表示されないような感じになるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;spaceキーに設定した場合、空白文字がechoされて、&lt;br &#x2F;&gt;
ちゃんと設定できているか、わかりにくいので、&lt;br &#x2F;&gt;
適当にleaderキーのマッピングを設定して試した方が手っ取り早い気もします。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yuzading-yi-komando&quot;&gt;ユーザ定義コマンド&lt;&#x2F;h3&gt;
&lt;p&gt;キーマップに関連したものとして、&lt;br &#x2F;&gt;
leaderキー以外にも、&lt;br &#x2F;&gt;
ユーザー定義コマンドというものがあります。&lt;&#x2F;p&gt;
&lt;p&gt;皆さんは、コマンドラインモードで、&lt;br &#x2F;&gt;
いつでも自分の好きな言葉を呼び出せたらいいと思ったことはないでしょうか？&lt;br &#x2F;&gt;
ちなみに、私が好きな言葉は、人生字を識るは憂患の始まりという、言葉です。&lt;&#x2F;p&gt;
&lt;p&gt;Vimで作業しているとき、&lt;br &#x2F;&gt;
ふとこの文字が見たくなったとき、&lt;br &#x2F;&gt;
コマンドラインモードでいちいち&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;人生字を識るは憂患の始まり&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;などと打つのは、あまりにもかったるいですよね。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、上記で設定したキーマップを設定して、&lt;br &#x2F;&gt;
例えば、Leaderキーで、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nmap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;Leade&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;a :echo &amp;#39;人生字を識るは憂患の始まり&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように設定するのもありでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、このようにして、&lt;br &#x2F;&gt;
好きな言葉を無数にキーマップしていたら、&lt;br &#x2F;&gt;
名前が衝突したり、デフォルトのキーバインドと重複したりと、&lt;br &#x2F;&gt;
メンテナンスが大変になります。&lt;&#x2F;p&gt;
&lt;p&gt;その場合、キーマップにするよりも、&lt;br &#x2F;&gt;
コマンドラインモードで直接呼び出せた方が便利だったりします。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、コマンドのショットカット的なものを設定したいとき、&lt;br &#x2F;&gt;
Vimだとどうするのか、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;command!を使えば解決です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;command&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;! Solitary :echo &amp;#39;人生字を識るは憂患の始まり&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これで、コマンドラインモードでSolitaryと打てば、&lt;br &#x2F;&gt;
いつでも我が座右の銘を召喚できます。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、もっと実用的なコマンドとしては、.vimrcをいちいち再読み込みするのが&lt;br &#x2F;&gt;
面倒なので、そちらもコマンドにしてしまうのもいいでしょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;command&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;! SS :so ~&#x2F;.vimrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;:soは:sourceの略であり、.vimrcを再読み込みする。&lt;br &#x2F;&gt;
ちなみに、すでに.vimrcを開いているときは、&lt;br &#x2F;&gt;
:so %でも同様。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kimatupunoshe-ding-nosanpurukodo-vimrc&quot;&gt;キーマップの設定のサンプルコード(.vimrc)&lt;&#x2F;h2&gt;
&lt;p&gt;最後に前回までの記事とと本記事の設定を反映した、&lt;br &#x2F;&gt;
.vimrcを紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;前回の記事は下記で、&lt;br &#x2F;&gt;
setのオプションについての記事です。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;104&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;下記の部分で、setの詳しい意味について、&lt;br &#x2F;&gt;
知りたい方は、上記の前回の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mapleader = &amp;quot;\&amp;lt;space&amp;gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; showmode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; shiftwidth=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorline&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorcolumn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; incsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; hlsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;leade&lt;&#x2F;span&gt;&lt;span&gt;r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;p i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; { {}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;LEF&lt;&#x2F;span&gt;&lt;span&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; [ []&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span&gt;LEFT&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span&gt; ( ()&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot; &amp;quot;&amp;quot;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap &amp;#39; &amp;#39;&amp;#39;&amp;lt;LEFT&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;inoremap jj &amp;lt;ESC&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;ESC&amp;gt;&amp;lt;ESC&amp;gt; :nohlsearch&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ss ^&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;noremap ;; $&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;nnoremap &amp;lt;C-t&amp;gt; :NERDTreeToggle&amp;lt;CR&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! Solitary :echo &amp;#39;人生字を識るは憂患の始まり&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;command! SS :so ~&#x2F;.vimrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;call plug#begin()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;  Plug &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;preservim&#x2F;nerdtree&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;call plug#end()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【Vim&#x2F;Neovimオプション】setコマンドとオプション一覧</title>
        <published>2023-01-16T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/set-vimrc/"/>
        <id>https://reisuta.com/set-vimrc/</id>
        
        <content type="html" xml:base="https://reisuta.com/set-vimrc/">&lt;p&gt;Vimを使うにあたって、.vimrcの設定は欠かせないが、&lt;br &#x2F;&gt;
まず始めに設定したいのは、setのオプション関係でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;本記事では、Vimを使い始めたら、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;まずは、設定したいオプションの紹介とsetの使い方などを解説します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;文字より動画で視聴したい方は、&lt;br &#x2F;&gt;
下記が本記事の内容を解説した動画になります。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;pcmvLGdOxBw&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Vimの導入をまだしていない方は、&lt;br &#x2F;&gt;
下記の動画で完全解説しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;下記動画一本で、Vimの基本事項はマスターできます。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;setkomandotohahe-ka&quot;&gt;setコマンドとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;setとは、コマンドの一種で、vimに様々な設定を適用させることができるものです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;そして、この適用可能な設定をoptionと呼び、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;setは、optionを設定するコマンドです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;オプションの一覧は、&lt;br &#x2F;&gt;
下記のサイトなどが詳しいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vim-jp.org&#x2F;vimdoc-ja&#x2F;options.html#set-option&quot;&gt;options - Vim日本語ドキュメント (vim-jp.org)&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のドキュメントを見るとわかりますが、&lt;br &#x2F;&gt;
笑っちゃうぐらいたくさんのオプションがあります。&lt;&#x2F;p&gt;
&lt;p&gt;中には、いつ使うねんって言う感じの&lt;br &#x2F;&gt;
オプションもあって、面白いので、&lt;br &#x2F;&gt;
暇な人は読んで見てください。&lt;&#x2F;p&gt;
&lt;p&gt;さて、脱線しましたが、&lt;br &#x2F;&gt;
具体的な使い方としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:se[t]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; {option}&lt;&#x2F;span&gt;&lt;span&gt; &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:se[t]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; no{option}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにコマンドモードで使用すると、&lt;br &#x2F;&gt;
そのオプションが有効になります。&lt;&#x2F;p&gt;
&lt;p&gt;なお、setと打たないで、&lt;br &#x2F;&gt;
seだけでも適用できます。&lt;&#x2F;p&gt;
&lt;p&gt;また、設定を無効にしたい場合h、&lt;br &#x2F;&gt;
上記にあるように、noをoptionの前につけるとできます。&lt;&#x2F;p&gt;
&lt;p&gt;optionの末尾に、?をつけると、&lt;br &#x2F;&gt;
その設定が有効かどうかの確認ができます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dai-biao-de-naopusiyon&quot;&gt;代表的なオプション&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;number&quot;&gt;number&lt;&#x2F;h3&gt;
&lt;p&gt;まず最初に設定したいのは、&lt;br &#x2F;&gt;
やはりこれでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;:set numberとすることで、&lt;br &#x2F;&gt;
行番号を付与することができる。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-05-26-at-22.19.26.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コーディングをする以上、&lt;br &#x2F;&gt;
行番号はやはりないと不便なもの。&lt;&#x2F;p&gt;
&lt;p&gt;このように常に適用したいやつとかに関しては、&lt;br &#x2F;&gt;
上記のようにいちいちコマンドラインモードで有効にするのではなく、&lt;br &#x2F;&gt;
&lt;strong&gt;.vimrcに記載してしまいましょう。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、カーソルからの相対番号にする設定も可能で、&lt;br &#x2F;&gt;
その場合は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;:set number rnu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにすると有効にできる。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-09-11-at-21.12.07.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なんか、グラフ理論っぽい、番号配置になっている気がします。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、numberについては、&lt;br &#x2F;&gt;
省略形としてnuも使えます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;showmode&quot;&gt;showmode&lt;&#x2F;h3&gt;
&lt;p&gt;これを設定すると、&lt;br &#x2F;&gt;
現在のモードがステータス行に表示されるようになる。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; showmode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-05-26-at-22.20.44.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下にINSERTと表示されているのがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;こちらの設定も適用させないメリットはないと思うので、&lt;br &#x2F;&gt;
ぜひとも設定したいですね。&lt;&#x2F;p&gt;
&lt;p&gt;まあそうは言っても、Vimの場合、&lt;br &#x2F;&gt;
デフォルトでONになっているオプションではありますが。&lt;&#x2F;p&gt;
&lt;p&gt;省略形はsmdになります。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;set-cursorline&quot;&gt;set cursorline&lt;&#x2F;h3&gt;
&lt;p&gt;カーソル行をハイライトします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-05-26-at-22.22.34.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;15行目がハイライトされていますね。&lt;&#x2F;p&gt;
&lt;p&gt;設定しておいた方が、便利で見やすいと&lt;br &#x2F;&gt;
推奨です。&lt;&#x2F;p&gt;
&lt;p&gt;省略形は、culですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;set-cursorcolumn&quot;&gt;set cursorcolumn&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、cursorlineの列バージョンです。&lt;&#x2F;p&gt;
&lt;p&gt;カーソル列をハイライトします。&lt;br &#x2F;&gt;
上記の画像だと、setのeの列、二列目がハイライトされていますね。&lt;&#x2F;p&gt;
&lt;p&gt;省略形は、cucです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;set-incsearch&quot;&gt;set incsearch&lt;&#x2F;h3&gt;
&lt;p&gt;何も設定していない状態で検索をしても、&lt;br &#x2F;&gt;
マッチしている部分がハイライトされないため、&lt;br &#x2F;&gt;
検索ができているのかわかりにくい。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、検索は、&lt;br &#x2F;&gt;
コマンドモードで&#x2F;を入力して、&lt;br &#x2F;&gt;
検索したい文字を入力してエンターで検索できます。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、下記のように&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; incsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;と設定すると、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-01-16-at-8.45.13.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&#x2F;setと検索した際にハイライトされる。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;見やすくなるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;またこちらは、&lt;strong&gt;検索したい文字を入力している最中でも&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ハイライトされるため、検索を多用する際は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;非常に便利です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;省略形は、isです。&lt;&#x2F;p&gt;
&lt;p&gt;ハイライトされているときに、CTRL-L を押すと、その後ろの文字が&lt;br &#x2F;&gt;
コマンドラインへ入力されます。&lt;&#x2F;p&gt;
&lt;p&gt;上記の画像の場合、一度CTRL-Lを押すと、&lt;br &#x2F;&gt;
スペースがコマンドラインへ入力され、もう一度押すと、&lt;br &#x2F;&gt;
s、その次は、hというふうに入力されます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;set-hlsearch&quot;&gt;set hlsearch&lt;&#x2F;h3&gt;
&lt;p&gt;上記の、incsearchだけだと、&lt;br &#x2F;&gt;
マッチした部分すべてをハイライトしてくれないため、&lt;br &#x2F;&gt;
こちらの設定で検索にマッチした部分をすべてハイライトしてくれる。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-01-16-at-8.48.09.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;Plugと検索したら、マッチしている部分がすべてハイライトされた&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;人によるかもしれませんが、&lt;br &#x2F;&gt;
やはりこちらの方が見やすいですかね？&lt;&#x2F;p&gt;
&lt;h3 id=&quot;set-shiftwidth&quot;&gt;set shiftwidth&lt;&#x2F;h3&gt;
&lt;p&gt;vimでは、&amp;gt;&amp;gt;や&amp;lt;&amp;lt;と入力すると&lt;br &#x2F;&gt;
インデントを適用することができる。&lt;br &#x2F;&gt;
その際に、デフォルトでどれぐらいインデントさせるかを設定するのが、&lt;br &#x2F;&gt;
このshiftwidthになる。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;set-vimrc&#x2F;Screenshot-2023-01-16-at-8.54.18.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;set shiftwidth=2で設定して&amp;gt;&amp;gt;を実行すると二文字ずれるのがわかる&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;デフォルト設定だと8になっているが、&lt;br &#x2F;&gt;
ほとんどの場合、8個分もインデントを入れたいケースはないかと思われる。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;なので、こちらも2などで設定することが多い印象です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;opusiyonwo-vimrcnimatomeru&quot;&gt;オプションを.vimrcにまとめる&lt;&#x2F;h2&gt;
&lt;p&gt;さて、色々のオプションを紹介しましたが、&lt;br &#x2F;&gt;
numberのところで触れた通り、&lt;br &#x2F;&gt;
いちいちコマンドラインモードで有効にするなんていう、&lt;br &#x2F;&gt;
かったるいことはできません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、.vimrcに記載して、&lt;br &#x2F;&gt;
デフォルト設定にしてしまいましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; showmode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; shiftwidth=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; incsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; hlsearch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorline&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;set&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cursorcolumn&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;となる。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、色々なオプションを有効にしていると、&lt;br &#x2F;&gt;
たまには素のVimで修行したくなるときがあります。&lt;&#x2F;p&gt;
&lt;p&gt;そんなときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vim -u NONE .vimrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにすると、&lt;br &#x2F;&gt;
例えば&lt;strong&gt;上記で設定したオプションなどは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;無効にされた初期状態で開けます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本記事では、やや素のVimよりの話でしたが、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;のようなプラグインの紹介なども行っているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;133&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Vim&#x2F;NeoVimプラグインのNERDTree導入でVSCode化</title>
        <published>2023-01-11T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/nerdtree/"/>
        <id>https://reisuta.com/nerdtree/</id>
        
        <content type="html" xml:base="https://reisuta.com/nerdtree/">&lt;p&gt;本記事では、&lt;strong&gt;主にプラグインの導入方法を解説します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
導入するプラグインとしては、&lt;mark&gt;NERDTreeという、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ファイルエクスプローラープラグインをインストールします&lt;&#x2F;mark&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;NERDTreeは使用者も多く、&lt;br &#x2F;&gt;
導入すると、劇的にVimが変化するので、&lt;br &#x2F;&gt;
お試しプラグインとしておすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;対象読者としては、&lt;&#x2F;p&gt;
&lt;p&gt;こんな方におすすめ&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Vimを使えるようになりたいけど、とっかかりが見つからない人&lt;&#x2F;li&gt;
&lt;li&gt;VSCodeからVimやNeovimに移行して、使えるようになりたい人&lt;&#x2F;li&gt;
&lt;li&gt;プラグインを導入方法が知りたい人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;などが主です。&lt;&#x2F;p&gt;
&lt;p&gt;慣れれば、NERDTree以外のプラグインも、&lt;br &#x2F;&gt;
自分なりにカスタマイズして導入できるようになります。&lt;&#x2F;p&gt;
&lt;p&gt;**本記事では、**Vimの設定を何もしていない状態から、&lt;br &#x2F;&gt;
NERDTreeというプラグインをインストールして、&lt;br &#x2F;&gt;
&lt;mark&gt;プラグイン導入の初めの一歩を踏み出します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;併せて、NERDTreeの基本操作についても&lt;br &#x2F;&gt;
解説します。&lt;&#x2F;p&gt;
&lt;p&gt;記事ではなく、動画で観たい方は、&lt;br &#x2F;&gt;
下記をご参考ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;qyh6ddiMCCk&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

また、Vim全般について、0から解説している、&lt;br &#x2F;&gt;
総集編動画もありますので、&lt;br &#x2F;&gt;
併せて御覧ください。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;&#x2F;p&gt;
&lt;h2 id=&quot;puraguindao-ru-fang-fa&quot;&gt;プラグイン導入方法&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;vimshe-ding-huairunochang-suo&quot;&gt;Vim設定ファイルの場所&lt;&#x2F;h3&gt;
&lt;p&gt;まず、Vimの設定ファイルは、&lt;br &#x2F;&gt;
&lt;strong&gt;~&#x2F;.vimrc&lt;&#x2F;strong&gt; にあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nerdtree&#x2F;Screenshot-2023-01-11-at-18.12.40.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ホームディレクトリ直下ですね。&lt;&#x2F;p&gt;
&lt;p&gt;もしこのファイルがなければ、&lt;br &#x2F;&gt;
作成しましょう&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;touch&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ~&#x2F;.vimrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vimの設定は、&lt;br &#x2F;&gt;
基本的にすべてこのファイルに記述していきます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;strong&gt;NeoVimの場合は、&lt;br &#x2F;&gt;
~&#x2F;.config&#x2F;nvim&#x2F;init.vimに記述します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Neovimの場合は、Luaの設定ファイルである、&lt;br &#x2F;&gt;
init.luaで記述することも可能です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;puraguinmaneziyanoinsutoru&quot;&gt;プラグインマネージャーのインストール&lt;&#x2F;h3&gt;
&lt;p&gt;さて、設定ファイルが見つかったところで、&lt;br &#x2F;&gt;
早速プラグインを導入していきます。&lt;&#x2F;p&gt;
&lt;p&gt;一個一個ダウンロードして、&lt;br &#x2F;&gt;
自分で管理するという方法もありますが、&lt;br &#x2F;&gt;
それだと、Updateや依存関係なども、&lt;br &#x2F;&gt;
割りと綿密に管理する必要があるので、&lt;br &#x2F;&gt;
面倒です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、基本的には、&lt;strong&gt;プラグインマネージャー&lt;&#x2F;strong&gt;という&lt;br &#x2F;&gt;
プラグインをまとめて管理してくれるツールを使用するのが無難でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;有名なプラグインマネージャーとしては、&lt;br &#x2F;&gt;
&lt;strong&gt;vim-plug、dein.vim、Vundleなど色々あります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;使いやすいものや気に入ったものを使って管理するのが&lt;br &#x2F;&gt;
いいと思います。(ちなみにNeovimだと、luaで書くために、&lt;br &#x2F;&gt;
これらとは別のプラグインマネージャーを使うことが多いです。)&lt;&#x2F;p&gt;
&lt;p&gt;私は、vim-plugを使っているので、&lt;br &#x2F;&gt;
&lt;strong&gt;本記事では、vim-plugの導入方法で進めていきます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;vim-plugは、使用者も多く、&lt;br &#x2F;&gt;
直感的に使用できるので、&lt;br &#x2F;&gt;
初めて使うプラグインマネージャーとしておすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;junegunn&#x2F;vim-plug&quot;&gt;Vim-plug&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;vim-plugnoinsutoru&quot;&gt;vim-plugのインストール&lt;&#x2F;h4&gt;
&lt;p&gt;vim-plugのインストール方法は、&lt;br &#x2F;&gt;
基本的に上記のgithubに則って行えばいいのですが、&lt;br &#x2F;&gt;
一応貼っておきます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -fLo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ~&#x2F;.vim&#x2F;autoload&#x2F;plug.vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --create-dirs \&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;    https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;junegunn&#x2F;vim-plug&#x2F;master&#x2F;plug.vim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;記法としては、&lt;br &#x2F;&gt;
&lt;mark&gt;call plug#begin()とcall plug#end()で&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;使用するプラグインを挟み込むようにして記述します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#begin&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;junegunn&#x2F;vim-easy-align&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#end&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記だと、vim-easy-alignというプラグインをインストールします。&lt;&#x2F;p&gt;
&lt;p&gt;このあと、:PlugInstallを実行すれば&lt;br &#x2F;&gt;
間に記載したプラグインをインストールしてくれます。&lt;&#x2F;p&gt;
&lt;p&gt;基本的な使い方としては、&lt;br &#x2F;&gt;
これだけなので、シンプルで使いやすいかなと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nerdtreeinsutoru&quot;&gt;NERDTreeインストール&lt;&#x2F;h3&gt;
&lt;p&gt;プラグインマネージャーも導入したので、&lt;br &#x2F;&gt;
早速NERDTreeをインストールしてみたいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NERDTreeとは、&lt;br &#x2F;&gt;
ファイルエクスプローラプラグインで、&lt;br &#x2F;&gt;
ディレクトリなどをツリー上に表示できたり、&lt;br &#x2F;&gt;
ファイルにアクセスしやすくするプラグインです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nerdtree&#x2F;Screenshot-2023-01-11-at-18.39.06-1024x801.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;こんな感じに左側にファイルのリスト並べて、ファイルを開くのが直感的になる。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;NERDTreeのような、ファイルエクスプローラプラグインを使うと、&lt;br &#x2F;&gt;
一気にVSCodeのように、ファイルの移動が楽になります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;preservim&#x2F;nerdtree&quot;&gt;NERDTree&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;NERDTreeだけでも、十分VSCodeっぽくなりますが、&lt;br &#x2F;&gt;
他に、unite.vimやctrlp.vimなども入れると、&lt;br &#x2F;&gt;
より検索性が上がって便利になります。&lt;&#x2F;p&gt;
&lt;p&gt;詳しくは&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;plugin-recommend&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で紹介しております。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;133&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;さて、NERDTreeのインストールは、&lt;br &#x2F;&gt;
基本的には、上記のgithubの手順に従いインストールします。&lt;&#x2F;p&gt;
&lt;p&gt;といっても、やることはシンプルで、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#begin&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;preservim&#x2F;nerdtree&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#end&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;を記述するだけです。&lt;&#x2F;p&gt;
&lt;p&gt;先程のvim-plugの記法の説明に戻りますと、&lt;br &#x2F;&gt;
上記のように、Plugという風に使用したいプラグインを指定します。&lt;br &#x2F;&gt;
githubのURLを指定しても問題ないので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#begin&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;  Plug&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;https:&#x2F;&#x2F;github.com&#x2F;preservim&#x2F;nerdtree&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;call&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; plug#end&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;としても大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;余談ですが、urlを指定してインストールすれば、&lt;br &#x2F;&gt;
open-browser.vimというプラグインで、&lt;br &#x2F;&gt;
URLを開く際に、すぐにプラグインのgithubに飛ぶことができるというメリットがあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tyru&#x2F;open-browser.vim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;tyru&#x2F;open-browser.vim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さて、少し脱線しましたが、&lt;br &#x2F;&gt;
記述したら、先述のように&lt;br &#x2F;&gt;
vim-plugの場合、&lt;strong&gt;:PlugInstall&lt;&#x2F;strong&gt;を実行する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;一旦、.vimrcを保存して、&lt;br &#x2F;&gt;
vimを再度開いて、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:PlugInstall&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;nerdtree&#x2F;Screenshot-2023-01-11-at-18.50.29.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんな感じですね。&lt;br &#x2F;&gt;
実行すれば、インストールできるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、上記のPlugInstallコマンドと同じように、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:NERDTree&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でファイルが表示されます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nerdtreenoshe-ding&quot;&gt;NERDTreeの設定&lt;&#x2F;h2&gt;
&lt;p&gt;いちおうここまでで、&lt;br &#x2F;&gt;
NERDTreeを使うことができるようになりましたが、&lt;br &#x2F;&gt;
毎回:NERDTreeなどと打つのは面倒です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;なので、keymapに設定してしまうのが&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;便利だと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;やり方としては、公式でも紹介されていますが、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nnoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C-&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; :NERDTreeToggle&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;C&lt;&#x2F;span&gt;&lt;span&gt;R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにすると、良いかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;これで、&lt;strong&gt;Ctrl + tでNERDTreeを表示したり、&lt;br &#x2F;&gt;
非表示にしたりできます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;nnoremapは、キーマップの設定で、&lt;br &#x2F;&gt;
&amp;lt;C-t&amp;gt;を :NERDTreeToggle&amp;lt;CR&amp;gt;と打ったのと同じことにします。&lt;&#x2F;p&gt;
&lt;p&gt;&amp;lt;C-t&amp;gt;は、Ctrl + tで、&amp;lt;C-でCtrlと何かという風になります。&lt;br &#x2F;&gt;
最後の&amp;lt;CR&amp;gt;はenterと同じ意味です。&lt;&#x2F;p&gt;
&lt;p&gt;上記のnnoremapのようなキーマップの詳細については、&lt;br &#x2F;&gt;
下記の記事で解説しているので、詳しくはこちらを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;119&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nerdtreedejue-eteokitaicao-zuo-titosito&quot;&gt;NERDTreeで覚えておきたい操作チートシート&lt;&#x2F;h2&gt;
&lt;p&gt;これで、基本的なNERDTreeの使い方としては、&lt;br &#x2F;&gt;
十分かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;最後に、NERDTreeのチートシートを掲載しておきます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;コマンド&lt;&#x2F;td&gt;&lt;td&gt;内容&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;o または enter&lt;&#x2F;td&gt;&lt;td&gt;ファイルやフォルダを開く&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;O&lt;&#x2F;td&gt;&lt;td&gt;再帰的にディレクトリをすべて開く&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;x&lt;&#x2F;td&gt;&lt;td&gt;親ディレクトリを閉じる&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;X&lt;&#x2F;td&gt;&lt;td&gt;再帰的にディレクトリを閉じる&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;go&lt;&#x2F;td&gt;&lt;td&gt;ファイルを開く(カーソルはツリーのまま)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;t&lt;&#x2F;td&gt;&lt;td&gt;タブでファイルを開く&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;i&lt;&#x2F;td&gt;&lt;td&gt;水平分割でファイルを開く&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;s&lt;&#x2F;td&gt;&lt;td&gt;垂直分割でファイルを開く&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;C&lt;&#x2F;td&gt;&lt;td&gt;ツリーのルートを選択したディレクトリにする&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;u&lt;&#x2F;td&gt;&lt;td&gt;ツリーのルートを上の階層にする&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;r&lt;&#x2F;td&gt;&lt;td&gt;選択したディレクトリを再読み込み&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;m&lt;&#x2F;td&gt;&lt;td&gt;メニューを表示(ファイルやディレクトリの追加削除などができる)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;I&lt;&#x2F;td&gt;&lt;td&gt;隠しファイルの表示、非表示&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;この中でも、よく使うのは、&lt;br &#x2F;&gt;
mコマンドからのファイルの追加・削除ですね。&lt;&#x2F;p&gt;
&lt;p&gt;あとは、Vimの場合、VSCodeのように、&lt;br &#x2F;&gt;
リアルタイムに変更が検出されるわけでもなかったりするので、&lt;br &#x2F;&gt;
rコマンドの再読み込みも、そこそこ使います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;oコマンドは、ファイルやフォルダを開くコマンドですが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;正直enterしか使ったことありません。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;あと、Cやuは、現在のディレクトリ階層を変えられるので、&lt;br &#x2F;&gt;
地味に便利なコマンドなのですが、使用シーンはやや少なめなので、&lt;br &#x2F;&gt;
毎回忘れて、「どうやるんだっけ」ってなるコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;地味に、.gitとか.gitignoreを見たいときもあるので、&lt;br &#x2F;&gt;
Iコマンドもよく使います。&lt;&#x2F;p&gt;
&lt;p&gt;最初のうちは、どれがどれだっけってなると思うので、&lt;br &#x2F;&gt;
慣れないうちは上記の表を見ながら操作になれると良いと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nerdtreeyi-wai-nopuraguingaiiren-he&quot;&gt;NERDTree以外のプラグインがいい人へ&lt;&#x2F;h2&gt;
&lt;p&gt;ファイラーのプラグインとしては、&lt;br &#x2F;&gt;
NERDTreeが、おそらく一番有名かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;そして、NERDTreeが、一番直感的かつ、&lt;br &#x2F;&gt;
シンプルで使いやすいプラグインだと思うので、&lt;br &#x2F;&gt;
本記事でもこちらのインストールを紹介しました。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、昨今だと、&lt;br &#x2F;&gt;
ややNERDTreeはレガシーな部類に入ってくる印象があります。&lt;br &#x2F;&gt;
(全然普通に使えるんですけどね。)&lt;&#x2F;p&gt;
&lt;p&gt;なので、必ずしも万人にNERDTreeが適しているかと言われると、&lt;br &#x2F;&gt;
微妙かもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;他にもファイラー系のプラグインで、&lt;br &#x2F;&gt;
良いものはたくさんあると思います。&lt;&#x2F;p&gt;
&lt;p&gt;Neovim製の、似たようなプラグインとしては、&lt;br &#x2F;&gt;
Telescope.nvimのようなものもあります。

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;scMgWEc-7iY&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

※ 正確にはTelescope.nvimはファジーファインダーなので、NERDTreeとは、&lt;br &#x2F;&gt;
少しタイプが違うのですが、大まかなジャンルが同じなので、紹介しております。&lt;&#x2F;p&gt;
&lt;p&gt;これ以外だと、Fernなども有名かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lambdalisue&#x2F;fern.vim&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;lambdalisue&#x2F;fern.vim&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ファイラーについては、正直個人の好みもあると思うので、&lt;br &#x2F;&gt;
一概にどれがいいとも言えません。&lt;&#x2F;p&gt;
&lt;p&gt;私は、NERDTreeの操作性に慣れてしまったのて、&lt;br &#x2F;&gt;
今更移行するのが面倒で、半ば惰性で使っています...&lt;&#x2F;p&gt;
&lt;p&gt;ただ、NERDTreeは、まあまあ無難な選択だとも思います。&lt;&#x2F;p&gt;
&lt;p&gt;結論、まずはNERDTreeで色々試してみて、&lt;br &#x2F;&gt;
慣れてきたら、いろんなプラグインに挑戦してみると、&lt;br &#x2F;&gt;
面白いのでおすすめです。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>お問い合わせ</title>
        <published>2023-01-03T00:00:00+00:00</published>
        <updated>2026-08-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/contact-form/"/>
        <id>https://reisuta.com/contact-form/</id>
        
        <content type="html" xml:base="https://reisuta.com/contact-form/">&lt;p&gt;当サイトへのご連絡は、以下の窓口で受け付けています。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-shi-nowu-ri-ji-shu-de-nazhi-zhai&quot;&gt;記事の誤り・技術的な指摘&lt;&#x2F;h2&gt;
&lt;p&gt;技術記事の内容に誤りを見つけた場合や、動作しないコードがあった場合は、GitHub の
Issue でご指摘いただけると確実です。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;reisuta&quot;&gt;GitHub: reisuta&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;sonota-nogolian-luo&quot;&gt;その他のご連絡&lt;&#x2F;h2&gt;
&lt;p&gt;記事の内容に関する質問、執筆・仕事のご相談などは X（Twitter）のダイレクトメッセージ
でお願いします。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&quot;&gt;X (Twitter): @xileng4&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ofan-shi-nituite&quot;&gt;お返事について&lt;&#x2F;h2&gt;
&lt;p&gt;個人で運営しているため、すべてのご連絡にお返事できるとは限りません。あらかじめ
ご了承ください。内容によっては、返信の代わりに記事の修正という形で反映することが
あります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dang-saitononei-rong-nituite&quot;&gt;当サイトの内容について&lt;&#x2F;h2&gt;
&lt;p&gt;掲載している情報は執筆時点のものです。ソフトウェアのバージョン差異などにより、
現在は当てはまらない記述が含まれる場合があります。免責事項については
&lt;a href=&quot;&#x2F;privacy-policy&#x2F;&quot;&gt;プライバシーポリシー&lt;&#x2F;a&gt;をご覧ください。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>Linuxコマンド基礎編 これだけは知っておきたい基本コマンド11選</title>
        <published>2022-12-27T00:00:00+00:00</published>
        <updated>2023-09-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/linux-command-basic/"/>
        <id>https://reisuta.com/linux-command-basic/</id>
        
        <content type="html" xml:base="https://reisuta.com/linux-command-basic/">&lt;h2 id=&quot;komandotohahe-ka&quot;&gt;コマンドとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;コマンドとは、コンピュータに対する命令のことです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
ブラウザのアイコンとかをクリックすると、ブラウザが起動しますが、&lt;br &#x2F;&gt;
あれも内部的にはコンピュータに対してブラウザを起動させる命令となっています。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドも基本的にはそれと同様ですが、&lt;br &#x2F;&gt;
&lt;strong&gt;命令を行う場所が、GUI(グラフィカルな部分。普段見ている画面)から&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;CUI(コマンドライン、ターミナルなどの黒い画面)に変わるようなイメージです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;「ターミナルってなんやねん」っていう人は、&lt;br &#x2F;&gt;
下記記事を読むとわかりやすいかもしれません。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;例えば、同じことを実現するにしても、&lt;br &#x2F;&gt;
ChromeのアイコンをクリックするとChromeが開く(GUI)のに対し、&lt;br &#x2F;&gt;
openコマンドというものを使って、&lt;br &#x2F;&gt;
コンピュータにfirefoxを開けと命令する(CUI)など、&lt;br &#x2F;&gt;
アプローチの仕方がそれぞれあります。&lt;br &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;linux-command-basic&#x2F;Screenshot-2022-12-27-at-12.58.28.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コマンドとは、上記のopenコマンドのような&lt;br &#x2F;&gt;
CUIの方ですね。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドを実行するには、terminalというアプリが必要ですが、&lt;br &#x2F;&gt;
普段GUIで作業していたことなどは、実はCUIのterminalからでも&lt;br &#x2F;&gt;
行うことができます。&lt;&#x2F;p&gt;
&lt;p&gt;そうした、様々な命令を行うものがコマンドで、&lt;br &#x2F;&gt;
コマンドには色々種類があります。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドは、OSのタイプによっても、&lt;br &#x2F;&gt;
微妙に異なっており、&lt;br &#x2F;&gt;
最も一般的なLinuxコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;Windowsなどにもコマンドがありますが、&lt;br &#x2F;&gt;
Linuxとは異なるコマンドであることが多いです。&lt;br &#x2F;&gt;
(例えば、dir(windows)とls(linux)のように)&lt;&#x2F;p&gt;
&lt;p&gt;Macは、UNIX系のOSなので、&lt;br &#x2F;&gt;
コマンドは、Linuxのものとほとんど同様です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、Linuxコマンドを学んでおけば、&lt;br &#x2F;&gt;
Macの操作に関しては、楽勝ですね。&lt;&#x2F;p&gt;
&lt;p&gt;以下、このLinuxコマンドについて詳しく触れていきます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;linuxkomandoji-chu&quot;&gt;Linuxコマンド基礎&lt;&#x2F;h2&gt;
&lt;p&gt;Linuxコマンドも種類はたくさんありまして、&lt;br &#x2F;&gt;
マイナーなものから有名なものまで様々です。&lt;&#x2F;p&gt;
&lt;p&gt;また、使用頻度が高いものもあれば、&lt;br &#x2F;&gt;
そこまで使わないものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;専門のサーバーエンジニアを目指すのであれば、&lt;br &#x2F;&gt;
割りと幅広いコマンドを学ぶ必要がありますが、&lt;br &#x2F;&gt;
Webエンジニアとかであれば、&lt;br &#x2F;&gt;
とりあえず、最低限のコマンドさえ覚えれば一旦十分です。&lt;br &#x2F;&gt;
(勉強しなくていいという意味ではなく、優先度を下げても&lt;br &#x2F;&gt;
いいという意味です)&lt;&#x2F;p&gt;
&lt;p&gt;下記では、「これは知らないと恥ずかしい」という&lt;br &#x2F;&gt;
常識コマンドを紹介していきます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;mark&gt;こういったLinuxコマンドとか、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Linuxの知識を体系的に勉強する手段としては、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;資格試験のLPICとかもおすすめです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私は執筆時点で、LPIC level2まで取得していますが、&lt;br &#x2F;&gt;
特に、LPIC level1については、&lt;br &#x2F;&gt;
重要かつよく使うコマンドが体系的にまとめられているので、&lt;br &#x2F;&gt;
おすすめです。&lt;br &#x2F;&gt;
(ネットワークのCCNAのような位置づけの資格試験ですね)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ls&quot;&gt;ls&lt;&#x2F;h3&gt;
&lt;p&gt;さて、少し脱線しましたが、&lt;br &#x2F;&gt;
早速コマンドを紹介します。&lt;&#x2F;p&gt;
&lt;p&gt;まず、1つ目に紹介するコマンドは、&lt;br &#x2F;&gt;
おそらく一番使う機会が多いであろう、&lt;br &#x2F;&gt;
&lt;strong&gt;lsコマンドです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、カレントディレクトリ内のファイルやディレクトリを表示するコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;カレントディレクトリとは、ユーザが現在作業中のディレクトリのことを指します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ディレクトリとは、&lt;br &#x2F;&gt;
フォルダのようなものと思っていただければ、&lt;br &#x2F;&gt;
大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;WindowsのようなGUIのOSだと、&lt;br &#x2F;&gt;
フォルダーという呼び方が一般的ですが、&lt;br &#x2F;&gt;
Linuxとかだと、ディレクトリという呼び方が一般的です。&lt;&#x2F;p&gt;
&lt;p&gt;Downloadsフォルダのことは、&lt;br &#x2F;&gt;
Downloadsディレクトリという風に呼んだりしますね。&lt;&#x2F;p&gt;
&lt;p&gt;コマンドの使用例としては、&lt;br &#x2F;&gt;
下記のように、ターミナルにlsと打ち込みます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Desktop&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;          Downloads        Movies           Pictures         Public&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;Documents&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;        Library          Music            Project          index.html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の場合、DesktopディレクトリやDownloadsディレクトリなどが、&lt;br &#x2F;&gt;
カレントディレクトリにあることが、lsコマンドで確認できますね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、「ユーザーが現在作業中のディレクトリ」とは、&lt;br &#x2F;&gt;
どういうことかというと、&lt;br &#x2F;&gt;
なにかのコマンドや操作をする際の基準となるディレクトリになるという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、冒頭のopenコマンドなどは、&lt;br &#x2F;&gt;
そのカレントディレクトリのファイルを開くというようなイメージです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に下記で紹介するコマンドは、&lt;br &#x2F;&gt;
カレントディレクトリを基準として実行されるという点では、同様です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pwd&quot;&gt;pwd&lt;&#x2F;h3&gt;
&lt;p&gt;こちらのコマンドは、&lt;br &#x2F;&gt;
&lt;strong&gt;カレントディレクトリの絶対パスを表示します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;絶対パスとは、ルートディレクトリからのフルパスのことを指します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そもそもコンピュータの構造には、&lt;br &#x2F;&gt;
ルートディレクトリというものがあり、&lt;br &#x2F;&gt;
&#x2F; と表します。&lt;br &#x2F;&gt;
すべてのファイルは、このディレクトリの下の階層に存在するので、&lt;br &#x2F;&gt;
もっとも上の階層ということになります。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、Desktopディレクトリの絶対パスは、&lt;br &#x2F;&gt;
Macとかだと、&#x2F;Users&#x2F;tarou&#x2F;Desktop ような感じになります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&#x2F; ディレクトリ配下にUsersというディレクトリがあり、&lt;br &#x2F;&gt;
その下にtarouというディレクトリがあり、&lt;br &#x2F;&gt;
その下にDesktopがあるという構造です。&lt;&#x2F;p&gt;
&lt;p&gt;絶対パスは、カレントディレクトリがどこであろうと、&lt;br &#x2F;&gt;
同一です。&lt;&#x2F;p&gt;
&lt;p&gt;このような絶対パスに対して、&lt;br &#x2F;&gt;
相対パスというものも存在します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;こちらは、カレントディレクトリからのパスになります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、&#x2F;Users&#x2F;tarouディレクトリに存在する場合、&lt;br &#x2F;&gt;
(このようにユーザー名のディレクトリで、ターミナルを開いて&lt;br &#x2F;&gt;
最初の位置のディレクトリをホームディレクトリと呼びます。)&lt;&#x2F;p&gt;
&lt;p&gt;Desktopは、.&#x2F;Desktopというパスで表せます。&lt;br &#x2F;&gt;
. という記法は、カレントディレクトリという意味です。&lt;br &#x2F;&gt;
カレントディレクトリの下にDesktopがあるということですね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、.. とすると、&lt;br &#x2F;&gt;
ひとつ上のディレクトリを表します。&lt;&#x2F;p&gt;
&lt;p&gt;以上、踏まえて、&lt;br &#x2F;&gt;
pwdを使うと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&#x2F;Users&#x2F;user1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようになります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、ホームディレクトリのことですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cd&quot;&gt;cd&lt;&#x2F;h3&gt;
&lt;p&gt;これもlsと同じぐらい使う機会が多いコマンドで、&lt;br &#x2F;&gt;
change directoryの略でcdです。&lt;br &#x2F;&gt;
ディレクトリを変更するという名称そのまんまで、&lt;br &#x2F;&gt;
カレントディレクトリを変更したいときに使います。&lt;&#x2F;p&gt;
&lt;p&gt;カレントディレクトリの変更とはどういうことかというと、&lt;br &#x2F;&gt;
適用させる場所を変えるという感じです。&lt;br &#x2F;&gt;
(openコマンドで開くフォルダを変えるようなイメージです)&lt;&#x2F;p&gt;
&lt;p&gt;カレントディレクトリを変えれば、&lt;br &#x2F;&gt;
もちろん、絶対パスも変わるので、&lt;br &#x2F;&gt;
pwdコマンドの挙動も変わってきます。&lt;&#x2F;p&gt;
&lt;p&gt;vimとかで開きたいファイルが、&lt;br &#x2F;&gt;
カレントディレクトリにない場合は、&lt;br &#x2F;&gt;
そのディレクトリまで移動する方法(cdコマンド)と、&lt;br &#x2F;&gt;
相対パスや絶対パスを指定して開く方法など、&lt;br &#x2F;&gt;
色々ありますが、cdコマンドはそうしたまさに一手段ですね。&lt;&#x2F;p&gt;
&lt;p&gt;実行例としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&#x2F;Users&#x2F;user1&#x2F;desktop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&#x2F;Users&#x2F;user1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cd &#x2F;Users&#x2F;user1&#x2F;Downloads&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;&#x2F;Users&#x2F;user1&#x2F;Downloads&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;cdでディレクトリを変更して、&lt;br &#x2F;&gt;
pwdコマンドのパスが変わっているのが、&lt;br &#x2F;&gt;
わかるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;ちなみに、cdに何も引数を与えなければ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ホームディレクトリに移動します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;source&quot;&gt;source&lt;&#x2F;h3&gt;
&lt;p&gt;上記の3つは、本当に常識レベルのコマンドです。&lt;br &#x2F;&gt;
現役エンジニアで知らない人はいないレベルというか、&lt;br &#x2F;&gt;
知らなかったら、かなりやばいレベルです。&lt;&#x2F;p&gt;
&lt;p&gt;これらに比べると、sourceコマンドは、&lt;br &#x2F;&gt;
ほんの少しだけマイナーです&lt;br &#x2F;&gt;
(一ミリもマイナーじゃないですし、常識コマンドですが、&lt;br &#x2F;&gt;
上記の3つよりはという相対比較です)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;このコマンドは、引数に与えられたファイルに書かれたコマンドを現在のシェルで実行するコマンドです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
.zshrcなど、シェルの設定ファイルをターミナルを再起動させずに適用したいときや、&lt;br &#x2F;&gt;
シェルスクリプトを実行したいときなどに使います。&lt;&#x2F;p&gt;
&lt;p&gt;シェルスクリプトとは、&lt;br &#x2F;&gt;
これらのLinuxコマンドをプログラムに落とし込めるプログラミング言語でして、&lt;br &#x2F;&gt;
より複雑な条件のもと(if文とか)で、&lt;br &#x2F;&gt;
特定のLinuxコマンドを実行したいときなどに使用するものです。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、下記のように&lt;br &#x2F;&gt;
.shという拡張子で作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;testシェルスクリプトです&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記のシェルスクリプトは、&lt;br &#x2F;&gt;
&#x27;testシェルスクリプトです&#x27;と表示してくれます&lt;&#x2F;p&gt;
&lt;p&gt;上記のファイルにlsとかを記載したら、&lt;br &#x2F;&gt;
lsが実行されます。&lt;&#x2F;p&gt;
&lt;p&gt;このようにシェルスクリプトの実行のために、&lt;br &#x2F;&gt;
sourceコマンドを使用することがあります。&lt;&#x2F;p&gt;
&lt;p&gt;下記のようにして、実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; source test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;testシェルスクリプトです&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の3つに比べると、&lt;br &#x2F;&gt;
使用頻度は少ないですが、&lt;br &#x2F;&gt;
シェルスクリプトをゴリゴリ書くようになると、&lt;br &#x2F;&gt;
使用頻度が上がるコマンドです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cp&quot;&gt;cp&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;こちらはコピーコマンドです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;ファイルやディレクトリをコピーできます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;第一引数にコピーされるファイルを、&lt;br &#x2F;&gt;
第二引数にコピー先のファイルを指定します。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、下記の例だと、&lt;br &#x2F;&gt;
test.shファイルをコピーした、&lt;br &#x2F;&gt;
test1.shというファイルを作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cp test.sh test1.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh test1.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;GUI上で、ファイルをクリックして、&lt;br &#x2F;&gt;
コピーとかってやるんじゃなくて、&lt;br &#x2F;&gt;
ターミナルでさくっとコピーできるようになったら、&lt;br &#x2F;&gt;
エンジニア感出せますよ(笑)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mkdir&quot;&gt;mkdir&lt;&#x2F;h3&gt;
&lt;p&gt;こちらは、ディレクトリを作成するコマンドです。&lt;br &#x2F;&gt;
基本的なコマンドではあるのですが、&lt;br &#x2F;&gt;
最近は、IDEとか、プラグイン経由でファイルを作成できるので、&lt;br &#x2F;&gt;
使用頻度は減ってきている印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;VimとかTmuxの設定ファイルを作成したりする際は、&lt;br &#x2F;&gt;
意外と使うかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;使用例は下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; mkdir test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;rm&quot;&gt;rm&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;ファイルやディレクトリを削除するコマンドです。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
rmコマンドで削除してしまったものは、&lt;br &#x2F;&gt;
復元ができないので、注意して実行する必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;GUI上のファイル削除となると、&lt;br &#x2F;&gt;
ゴミ箱に入れるとかになると思うので、&lt;br &#x2F;&gt;
仮に間違って削除しても&lt;br &#x2F;&gt;
復元できますが、&lt;br &#x2F;&gt;
rmコマンドで削除したら、基本的には、&lt;br &#x2F;&gt;
もう復元できません。&lt;&#x2F;p&gt;
&lt;p&gt;なので、不安な場合は&lt;br &#x2F;&gt;
無理して使わなくても良いかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;使用例としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; rm test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;という感じです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、下記のようなコマンドを使うと、&lt;br &#x2F;&gt;
すべてのファイルを削除してしまうので、&lt;br &#x2F;&gt;
絶対に実行してはいけません。(見るだけにしてください)&lt;br &#x2F;&gt;
冗談抜きでPCが死にます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rm -rf &#x2F;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;OSの破壊と同義なので、&lt;br &#x2F;&gt;
繰り返しになりますが、実行しないでください。&lt;&#x2F;p&gt;
&lt;p&gt;(どうしても実行したい変態の人は、&lt;br &#x2F;&gt;
仮想環境など壊れてもいい環境で実行してください)&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、下記の記事で、&lt;br &#x2F;&gt;
上記コマンドを実行したらどうなるのかという、&lt;br &#x2F;&gt;
なかなかにドMな取り組みをしていて面白かったので、&lt;br &#x2F;&gt;
変態志向の人はご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dev.classmethod.jp&#x2F;articles&#x2F;tried-rm-rf-root-on-amazon-linux-2&#x2F;&quot;&gt;https:&#x2F;&#x2F;dev.classmethod.jp&#x2F;articles&#x2F;tried-rm-rf-root-on-amazon-linux-2&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;touch&quot;&gt;touch&lt;&#x2F;h3&gt;
&lt;p&gt;ファイルのタイムスタンプを更新するコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;けれどもこのコマンドの面白いところは、&lt;br &#x2F;&gt;
そうした正規の使い方で使うことがほとんどなく、&lt;br &#x2F;&gt;
副作用のほうを目的として実行することです。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、&lt;mark&gt;引数で指定したファイルが存在しない場合、その空ファイルを作成するという副次効果が&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;あるので、その用途で使われることが多いです。&lt;&#x2F;mark&gt;(というか私はその用途以外で使ったことがありません。)&lt;&#x2F;p&gt;
&lt;p&gt;実行例としては、下記のような感じで、&lt;br &#x2F;&gt;
引数に作成したいファイル名を指定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; touch test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;cat&quot;&gt;cat&lt;&#x2F;h3&gt;
&lt;p&gt;お、猫か？&lt;br &#x2F;&gt;
って思うかもしれません、&lt;br &#x2F;&gt;
こちらのコマンドは、ファイルの内容を表示するコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;内容というのは、中身ですね。&lt;br &#x2F;&gt;
たとえば、&lt;mark&gt;テキストファイルで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;こんにちはと書かれているファイルがあったとすると、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;こんいちはとターミナルの標準出力に表示されます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vimとかでいちいち開くのが面倒なときに、&lt;br &#x2F;&gt;
サクッと中身を確認したいときとかに使います。&lt;&#x2F;p&gt;
&lt;p&gt;Linuxの基礎的な本とかだと、&lt;br &#x2F;&gt;
割りと序盤に出てくるコマンドなので、&lt;br &#x2F;&gt;
わりかし、初心者向けのコマンドみたいに思われがちですが、&lt;br &#x2F;&gt;
catエディタ(後述)のような使い方も可能なため、&lt;br &#x2F;&gt;
結構Linuxの本質的なコマンドの一つで、奥深いなと個人的には感じています。&lt;&#x2F;p&gt;
&lt;p&gt;実行例としては、下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; cat test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;testシェルスクリプトです&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみにcatは、パイプやリダイレクトといったシェルの機能をフル活用して、&lt;br &#x2F;&gt;
中身を追記したりすることもできます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;linux-command-basic&#x2F;Screenshot-2023-09-13-at-21.19.41.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記のようなのは、まだ序の口ですが、&lt;br &#x2F;&gt;
これをめちゃくちゃフル活用して、&lt;br &#x2F;&gt;
catエディタみたいな使い方をしている方もいるそうです。&lt;br &#x2F;&gt;
(いるそうですというか、いたそうですの方が正しいかもしれません)&lt;&#x2F;p&gt;
&lt;p&gt;エディタというのは、文字通りVimとかみたいに、&lt;br &#x2F;&gt;
catでプログラミングするということですね。(笑)&lt;&#x2F;p&gt;
&lt;p&gt;お使いのエディタはなんですか？って聞かれたら、&lt;br &#x2F;&gt;
一度でいいからcatですって答えたいですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;grep&quot;&gt;grep&lt;&#x2F;h3&gt;
&lt;p&gt;grepは、独学のときに使うことがなく、&lt;br &#x2F;&gt;
実務に入ってから使うようになるコマンドの筆頭ともいえるもので、&lt;br &#x2F;&gt;
簡単に言うと、&lt;strong&gt;ファイルやテキストなどの検索をするコマンドです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;grepは奥が深いので、&lt;br &#x2F;&gt;
ここでは概要しか紹介しませんが、&lt;br &#x2F;&gt;
気になる人は、grepの詳細解説の記事も御覧ください。&lt;br &#x2F;&gt;
(※準備中です...)&lt;&#x2F;p&gt;
&lt;p&gt;使い方を紹介します。&lt;br &#x2F;&gt;
下記は、binという文字列をtest.shファイルから検索しています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; grep &amp;#39;bin&amp;#39; test.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;#!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;binが含まれている、&lt;br &#x2F;&gt;
#!&#x2F;bin&#x2F;bashが表示されていますね。&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、grep 検索したい文字 対象ファイルという書式で&lt;br &#x2F;&gt;
使用します。&lt;&#x2F;p&gt;
&lt;p&gt;実務でよく使うパターンとしては、&lt;br &#x2F;&gt;
メソッドや関数がどのへんで呼ばれているか目星をつけたりする際に&lt;br &#x2F;&gt;
使用されることが多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;例えば下記は、srcディレクトリ配下のすべてを検索対象として、&lt;br &#x2F;&gt;
fetchApiFuncという文字列を検索します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; grep &amp;#39;fetchApiFunc&amp;#39; src&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;grepは、git grepとかvim grepのような、&lt;br &#x2F;&gt;
派生したgrepとかもたくさんあるので、&lt;br &#x2F;&gt;
使いこなせるようになりたいコマンドの一つです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、&lt;mark&gt;grepとかlsのような&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;基本コマンドは、最近ではripgrepとかexaのような、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;上位互換コマンドもあり、そちらも熱いので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;興味がある方は、下記の記事もご参考ください。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;156&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;less&quot;&gt;less&lt;&#x2F;h3&gt;
&lt;p&gt;こちらのコマンドは、&lt;br &#x2F;&gt;
catに若干似ていますが、&lt;br &#x2F;&gt;
&lt;strong&gt;ファイルの内容を確認できるコマンドです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、こちらはターミナルの標準出力に出すのではなく、&lt;br &#x2F;&gt;
Vimとかのようにターミナルウインドウをまるごとファイルの内容を表示するという特徴があります。&lt;&#x2F;p&gt;
&lt;p&gt;catもいいですが、&lt;br &#x2F;&gt;
個人的にはlessのほうが手っ取り早いことも多いですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;less test.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;linux-command-basic&#x2F;Screenshot-2023-09-13-at-21.30.12.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;lessの中での操作は、&lt;br &#x2F;&gt;
Vimの基本操作とほぼ同様で、&lt;br &#x2F;&gt;
抜けるときは、qを押します。&lt;&#x2F;p&gt;
&lt;p&gt;Vimの基本的な使用方法については、&lt;br &#x2F;&gt;
下記の記事を御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;11&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sonota-noyou-ming-komando&quot;&gt;その他の有名コマンド&lt;&#x2F;h2&gt;
&lt;p&gt;本記事では、代表的なコマンドと、&lt;br &#x2F;&gt;
使い方の例を掲載しましたが、&lt;br &#x2F;&gt;
各コマンドには、オプションも存在するため、&lt;br &#x2F;&gt;
それらも合わせて知っておく必要がある。&lt;br &#x2F;&gt;
(覚えることが多いですね)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;オプションとは、コマンドに与える、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;フラグのようなものでして、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;例えば、今回紹介した中だと、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;rm -rfコマンドの、-rfの部分がオプションになります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合は、ディレクトリも再帰的に、&lt;br &#x2F;&gt;
確認無しでというオプションになります。&lt;&#x2F;p&gt;
&lt;p&gt;他には、lsコマンドとかだと、&lt;br &#x2F;&gt;
-aオプションを指定すると、&lt;br &#x2F;&gt;
隠しファイルも表示してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;このようにオプションは、&lt;br &#x2F;&gt;
コマンドに何らかの効果を与えるフラグのようなものですね。&lt;&#x2F;p&gt;
&lt;p&gt;また、コマンドでも、&lt;br &#x2F;&gt;
まだまだ重要なコマンドは、&lt;br &#x2F;&gt;
残っていて、ぱっと思いつく限りでも、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;参考&quot; webicon=&quot;st-svg-file-text-o&quot; color=&quot;#757575&quot; bordercolor=&quot;&quot; bgcolor=&quot;#fafafa&quot; borderwidth=&quot;0&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ping&lt;&#x2F;li&gt;
&lt;li&gt;dig&lt;&#x2F;li&gt;
&lt;li&gt;curl&lt;&#x2F;li&gt;
&lt;li&gt;mv&lt;&#x2F;li&gt;
&lt;li&gt;chmod&lt;&#x2F;li&gt;
&lt;li&gt;which&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;などがあります。&lt;&#x2F;p&gt;
&lt;p&gt;各コマンドのオプションの解説や、&lt;br &#x2F;&gt;
上記コマンドの解説などについても、&lt;br &#x2F;&gt;
また後に記事にしようと考えています。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;295&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>プライバシーポリシー</title>
        <published>2022-12-27T00:00:00+00:00</published>
        <updated>2023-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/privacy-policy/"/>
        <id>https://reisuta.com/privacy-policy/</id>
        
        <content type="html" xml:base="https://reisuta.com/privacy-policy/">&lt;h2 id=&quot;konosaitogashou-ji-suruge-ren-detatoshou-ji-noli-you&quot;&gt;このサイトが収集する個人データと収集の理由&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトには、個人情報を入力していただくフォームはありません。&lt;br &#x2F;&gt;
&lt;a href=&quot;&#x2F;contact-form&#x2F;&quot;&gt;お問い合わせ&lt;&#x2F;a&gt;は GitHub および X（Twitter）を通じて受け付けており、これらの外部サービス上でのやりとりで得た情報は、そのご連絡への回答のためにのみ利用します。各サービスにおける個人情報の取り扱いは、それぞれの運営者のプライバシーポリシーに従います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-ben-fang-zhen&quot;&gt;基本方針&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは、個人情報の重要性を認識し、個人情報を保護することが社会的責務であると考え、個人情報に関する法令を遵守し、当サイトで取扱う個人情報の取得、利用、管理を適正に行います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong-fan-wei&quot;&gt;適用範囲&lt;&#x2F;h2&gt;
&lt;p&gt;本プライバシーポリシーは、お客様の個人情報もしくはそれに準ずる情報を取り扱う際に、当サイトが遵守する方針を示したものです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ge-ren-qing-bao-noli-yong-mu-de&quot;&gt;個人情報の利用目的&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは、お客様からご提供いただく情報を以下の目的の範囲内において利用します。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ご本人確認のため&lt;&#x2F;li&gt;
&lt;li&gt;お問い合わせ等の確認・回答のため&lt;&#x2F;li&gt;
&lt;li&gt;メールマガジン・DM・各種お知らせ等の配信・送付のため&lt;&#x2F;li&gt;
&lt;li&gt;キャンペーン・アンケート・モニター・取材等の実施のため&lt;&#x2F;li&gt;
&lt;li&gt;サービスの提供・改善・開発・マーケティングのため&lt;&#x2F;li&gt;
&lt;li&gt;お客さまの承諾・申込みに基づく、提携事業者・団体等への個人情報の提供のため&lt;&#x2F;li&gt;
&lt;li&gt;利用規約等で禁じている行為などの調査のため&lt;&#x2F;li&gt;
&lt;li&gt;その他個別に承諾いただいた目的&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ge-ren-qing-bao-noguan-li&quot;&gt;個人情報の管理&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは、個人情報の正確性及び安全確保のために、セキュリティ対策を徹底し、個人情報の漏洩、改ざん、不正アクセスなどの危険については、必要かつ適切なレベルの安全対策を実施します。&lt;&#x2F;p&gt;
&lt;p&gt;当サイトは、第三者に重要な情報を読み取られたり、改ざんされたりすることを防ぐために、SSLによる暗号化を使用しております。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ge-ren-qing-bao-nodi-san-zhe-ti-gong&quot;&gt;個人情報の第三者提供&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは、以下を含む正当な理由がある場合を除き、個人情報を第三者に提供することはありません。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ご本人の同意がある場合&lt;&#x2F;li&gt;
&lt;li&gt;法令に基づく場合&lt;&#x2F;li&gt;
&lt;li&gt;人の生命・身体・財産の保護に必要な場合&lt;&#x2F;li&gt;
&lt;li&gt;公衆衛生・児童の健全育成に必要な場合&lt;&#x2F;li&gt;
&lt;li&gt;国の機関等の法令の定める事務への協力の場合（税務調査、統計調査等）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;当サイトでは、利用目的の達成に必要な範囲内において、他の事業者へ個人情報を委託することがあります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ge-ren-qing-bao-niguan-suruowen-ihe-wase&quot;&gt;個人情報に関するお問い合わせ&lt;&#x2F;h2&gt;
&lt;p&gt;開示、訂正、利用停止等のお申し出があった場合には、所定の方法に基づき対応致します。具体的な方法については、個別にご案内しますので、お問い合わせください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cookie-kutuki&quot;&gt;Cookie（クッキー）&lt;&#x2F;h2&gt;
&lt;p&gt;Cookie（クッキー）は、利用者のサイト閲覧履歴を、利用者のコンピュータに保存しておく仕組みです。&lt;br &#x2F;&gt;
利用者はCookie（クッキー）を無効にすることで収集を拒否することができますので、お使いのブラウザの設定をご確認ください。ただし、Cookie（クッキー）を拒否した場合、当サイトのいくつかのサービス・機能が正しく動作しない場合があります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guang-gao-nituite&quot;&gt;広告について&lt;&#x2F;h2&gt;
&lt;p&gt;当ブログでは、第三者配信の広告サービス（Googleアドセンス）を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、クッキー（Cookie）を使用しております。&lt;br &#x2F;&gt;
クッキーを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。&lt;&#x2F;p&gt;
&lt;p&gt;Cookieを無効にする方法やGoogleアドセンスに関する詳細は「&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;policies.google.com&#x2F;technologies&#x2F;ads?gl=jp&quot;&gt;広告 – ポリシーと規約 – Google&lt;&#x2F;a&gt;」をご確認ください。&lt;&#x2F;p&gt;
&lt;p&gt;また、当ブログは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;anariteikusu-akusesujie-xi-turunituite&quot;&gt;アナリティクス・アクセス解析ツールについて&lt;&#x2F;h2&gt;
&lt;p&gt;当ブログでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。このGoogleアナリティクスはトラフィックデータの収集のためにクッキー（Cookie）を使用しております。トラフィックデータは匿名で収集されており、個人を特定するものではありません。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mian-ze-shi-xiang&quot;&gt;免責事項&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトからのリンクやバナーなどで移動したサイトで提供される情報、サービス等について一切の責任を負いません。&lt;br &#x2F;&gt;
また当サイトのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。情報が古くなっていることもございます。&lt;&#x2F;p&gt;
&lt;p&gt;当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zhu-zuo-quan-xiao-xiang-quan&quot;&gt;著作権・肖像権&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトで掲載しているすべてのコンテンツ（文章、画像、動画、音声、ファイル等）の著作権・肖像権等は当サイト所有者または各権利所有者が保有し、許可なく無断利用（転載、複製、譲渡、二次利用等）することを禁止します。また、コンテンツの内容を変形・変更・加筆修正することも一切認めておりません。&lt;&#x2F;p&gt;
&lt;p&gt;各権利所有者におかれましては、万一掲載内容に問題がございましたら、ご本人様よりお問い合わせください。迅速に対応いたします。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rinku&quot;&gt;リンク&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは原則リンクフリーです。リンクを行う場合の許可や連絡は不要です。引用する際は、引用元の明記と該当ページへのリンクをお願いします。&lt;&#x2F;p&gt;
&lt;p&gt;ただし、画像ファイルへの直リンク、インラインフレームを使用したHTMLページ内で表示する形でのリンクはご遠慮ください。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ben-puraibasiporisinobian-geng&quot;&gt;本プライバシーポリシーの変更&lt;&#x2F;h2&gt;
&lt;p&gt;当サイトは、本プライバシーポリシーの内容を適宜見直し、その改善に努めます。&lt;br &#x2F;&gt;
本プライバシーポリシーは、事前の予告なく変更することがあります。&lt;br &#x2F;&gt;
本プライバシーポリシーの変更は、当サイトに掲載された時点で有効になるものとします。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【TypeScript関数】アロー関数やコールバック関数とオプショナル引数</title>
        <published>2022-12-27T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/ts-func/"/>
        <id>https://reisuta.com/ts-func/</id>
        
        <content type="html" xml:base="https://reisuta.com/ts-func/">&lt;h2 id=&quot;guan-shu-tohahe-ka&quot;&gt;関数とは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;TypeScriptに限らず、&lt;br &#x2F;&gt;
プログラミング言語のほとんどには、&lt;br &#x2F;&gt;
関数という概念があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;変数が、&lt;strong&gt;値&lt;&#x2F;strong&gt;を使いまわしたり、名付けをしたりすることができる箱であるなら、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;関数は、&lt;strong&gt;処理&lt;&#x2F;strong&gt;を使いまわしたり、名付けをしたりすることができる箱です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;変数について、&lt;br &#x2F;&gt;
詳しく知りたい方は、&lt;br &#x2F;&gt;
下記の記事をご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;21&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;関数は、プログラムをわかりやすく分割して、&lt;br &#x2F;&gt;
処理ごとに命名をして見通しをよくすることができます。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、特に大規模のプロジェクトなどでは、&lt;br &#x2F;&gt;
関数を使うことはもはや必須とも言えるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;実は、高校とか中学の授業とかで習う、&lt;br &#x2F;&gt;
&lt;strong&gt;関数のy=2xとかも、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;プログラミング言語でいう、関数のような特徴を持っています。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記は、 xに5とかを代入したら、&lt;br &#x2F;&gt;
10を返却する関数なので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; linear_func&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにコードで表すこともできます。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、&lt;strong&gt;何らかの値を与えて、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;何らかの値を返すものが関数と考えることができるので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;概ね、高校とか中学に習った関数のイメージとは外れていません&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、プログラミング言語でいう、関数は、&lt;br &#x2F;&gt;
値を返さずに処理だけを行う場合もあるという特徴はあります。&lt;br &#x2F;&gt;
(このように値を返さない関数の返り値の型はvoidと表現します。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-func&#x2F;office-gfaa23b407_1280-1024x682.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;typescriptdenoguan-shu-ding-yi-fang-fa&quot;&gt;TypeScriptでの関数定義方法&lt;&#x2F;h2&gt;
&lt;p&gt;TypeScriptの関数宣言は、&lt;br &#x2F;&gt;
&lt;strong&gt;function 関数名(引数リスト): 返り値の型 { 処理の中身 }という形の構文で 表されます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;[] {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; [10, 30] と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;引数の型を間違えたり、引数の数を間違えると、&lt;br &#x2F;&gt;
コンパイルエラーとなります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;下記の2つはエラー&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;10&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;30&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;returnによって、&lt;br &#x2F;&gt;
関数の実行が終了して与えられた式が関数の返り値となります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;そのため、returnよりあとに書かれた部分は、&lt;br &#x2F;&gt;
実行されません。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;[] {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 実行されない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; [10, 30] と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そして、返り値にも型チェックが行われ、&lt;br &#x2F;&gt;
test関数の返り値は、number[]でなければなりません。&lt;&#x2F;p&gt;
&lt;p&gt;返り値がない関数の宣言は、&lt;br &#x2F;&gt;
void型を設定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; void&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;test&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;関数の定義の仕方としては、&lt;br &#x2F;&gt;
上記の他に、変数に入れる方法もあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; functest&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; function&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; void&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;functest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;変数に代入する場合は、&lt;strong&gt;function (引数): 返り値の型 {}というふうに定義します。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
関数名は省略できます。&lt;&#x2F;p&gt;
&lt;p&gt;実際の使用ケースでは、&lt;br &#x2F;&gt;
上記のように変数に入れる記法のほうが多い気がしますかね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;aroguan-shu&quot;&gt;アロー関数&lt;&#x2F;h3&gt;
&lt;p&gt;TypeScriptとかJavaScriptの関数定義において、&lt;br &#x2F;&gt;
正直functionなどと書いて定義することは稀で、&lt;br &#x2F;&gt;
ほとんどの場合こちらのアロー関数の形式で定義されているかと思われます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;構文としては、&lt;strong&gt;(引数): 返り値の型 =&amp;gt; {}&lt;&#x2F;strong&gt; とします。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; functest&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; void =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [];&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;test&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;functest&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;返り値をいきなり返すような、&lt;br &#x2F;&gt;
簡単なアロー関数であれば、更に省略することもできます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; arg2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;simplefunc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、&lt;strong&gt;(arg1: number, arg2: number): number =&amp;gt; { return arg1 + arg2 }&lt;&#x2F;strong&gt; と同様です。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトを返す場合は、{}と書いても、&lt;br &#x2F;&gt;
アロー関数の中身を囲む{}とみなされてしまうので、&lt;br &#x2F;&gt;
()で囲む必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;simpleObj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    val1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;正しい&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;simpleObj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; ({ val1: arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; arg2 })&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;エラー&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;simpleObj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; { val1: arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; arg2 }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;simplefunc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 30&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;opusiyonaruyin-shu&quot;&gt;オプショナル引数&lt;&#x2F;h3&gt;
&lt;p&gt;通常の関数定義の場合、&lt;br &#x2F;&gt;
引数に定義されたものを渡さなければエラーとなりますが、&lt;br &#x2F;&gt;
場合によっては、何も渡さずに処理したいこともあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;その際に使用するのが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;&lt;strong&gt;オプショナル引数やデフォルト値の指定です。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt; &lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;オプショナル引数は、&lt;strong&gt;引数名?: 型&lt;&#x2F;strong&gt;と定義します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;?:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; arg1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;simplefunc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これを実行してみるとわかるが、&lt;br &#x2F;&gt;
オプショナル引数が省略された場合、&lt;br &#x2F;&gt;
その引数にはundefinedが入ります。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、undefinedが混入することを避けたい場合、&lt;br &#x2F;&gt;
デフォルト値を使ったほうがいいでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルト値は、&lt;strong&gt;引数名: 型 = 値&lt;&#x2F;strong&gt;と定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; arg2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;simplefunc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、上記のコードをオプショナル引数として、&lt;br &#x2F;&gt;
実行すると、arg2がundefinedになる可能性があると、&lt;br &#x2F;&gt;
エラーになります。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルト値を指定した場合、&lt;br &#x2F;&gt;
引数にundefinedを渡すこともできるが、&lt;br &#x2F;&gt;
その場合、デフォルト値に変換されます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; simplefunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 20&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arg2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;20と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; arg2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;simplefunc&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; undefined&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;korubatukuguan-shu&quot;&gt;コールバック関数&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;mark&gt;コールバック関数とは、関数の引数として渡される関数のことで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;これに対しコールバック関数を引数として受け取る関数を高階関数といいます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;代表的な高階関数としては、mapやfilterなどがありますね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Array&#x2F;map&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;Array&#x2F;map&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;User&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; { name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;, email&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; users&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;[]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    { name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Alice&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, email:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;alice@test.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    { name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Mike&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, email:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;mike@test.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; callbackfunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;user&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;User&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string =&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; user.name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; func1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; users.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;map&lt;&#x2F;span&gt;&lt;span&gt;(callbackfunc)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(func1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;[&amp;quot;Alice&amp;quot;, &amp;quot;Mike&amp;quot;] と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;map関数に渡されている、callbackfuncがコールバック関数にあたり、&lt;br &#x2F;&gt;
高階関数のmapは、与えられた関数を配列のすべての要素に対して呼び出して、&lt;br &#x2F;&gt;
新しい配列を生成しています。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zienerikusu&quot;&gt;ジェネリクス&lt;&#x2F;h3&gt;
&lt;p&gt;ジェネリクスとは、何かと考えると、&lt;br &#x2F;&gt;
下記の記事にあるような感じの説明が適当かと思われます。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;使われるまで型が決まらないようないろいろな型の値を受け入れられる機能を作るときに使います。ジェネリクスは日本語で総称型と呼ばれることもあります&lt;br &#x2F;&gt;
https:&#x2F;&#x2F;future-architect.github.io&#x2F;typescript-guide&#x2F;generics.html&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;型引数のように、呼び出す側で型とかを指定できるような記法で、&lt;br &#x2F;&gt;
関数の場合、&amp;lt;型引数&amp;gt;(引数): 返り値というふうに定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; func1&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;[] {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;[]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    arr.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;func1&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;number&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;[10]と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;呼び出すときは、関数&amp;lt;型引数&amp;gt;(引数)で呼び出します。&lt;br &#x2F;&gt;
呼び出すときに、型を指定できるので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;function&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; func1&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FD971F;font-style: italic;&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;[] {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;    const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;[]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; []&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    arr.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;push&lt;&#x2F;span&gt;&lt;span&gt;(arg1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;func1&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;arr&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;[&amp;#39;arr&amp;#39;]と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とかもできます。&lt;&#x2F;p&gt;
&lt;p&gt;ジェネリクスについては、&lt;br &#x2F;&gt;
下記の記事でも触れているので、&lt;br &#x2F;&gt;
良ければご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;25&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>文系未経験からWebエンジニアに就職するまでに行ったこと</title>
        <published>2022-12-25T00:00:00+00:00</published>
        <updated>2023-09-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/jobchange/"/>
        <id>https://reisuta.com/jobchange/</id>
        
        <content type="html" xml:base="https://reisuta.com/jobchange/">&lt;p&gt;本記事では、私がどのようにエンジニアになったのかについて、&lt;br &#x2F;&gt;
ご紹介しようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私は現在は&lt;mark&gt;自社サービス企業で、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;フロントバックエンド問わず開発をしている、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Web系のエンジニアをやっています&lt;&#x2F;mark&gt;が、&lt;br &#x2F;&gt;
ここに来るまでに色々な変遷がありました。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、以前下記のようなツイートをしましたが、&lt;br &#x2F;&gt;
この状態は、割と最後の方で、&lt;br &#x2F;&gt;
最初はもっとひどい状態からスタートしていました。&lt;&#x2F;p&gt;
&lt;p&gt;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1703241846904996128&lt;&#x2F;p&gt;
&lt;p&gt;こういった、どうやってエンジニアになったのかということについて、&lt;br &#x2F;&gt;
一つのサンプルとして、ご紹介したいと思います。&lt;&#x2F;p&gt;
&lt;p&gt;未経験でエンジニアを目指されている方の、&lt;br &#x2F;&gt;
参考になる部分もあるかと思うので、&lt;br &#x2F;&gt;
ぜひとも最後まで読んでくださると嬉しいです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wen-xi-wei-jing-yan-noji-zu-du-xue-sutato&quot;&gt;文系未経験の既卒独学スタート&lt;&#x2F;h2&gt;
&lt;p&gt;私は、文系未経験で独学で勉強して、&lt;br &#x2F;&gt;
先述の通り、現在自社開発企業のソフトウェアエンジニアとして勤務しています。&lt;&#x2F;p&gt;
&lt;p&gt;今でこそエンジニアですが、&lt;br &#x2F;&gt;
最初にエンジニアを志したときは、&lt;br &#x2F;&gt;
かなりひどい状況(レベルが低すぎる)でした。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gmailではなく、キャリアメールしか使えなかった。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;PCを開くのは、大学のレポート提出のときのみ&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;エクセルやWordの使い方があまりわからない。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;エクセルを使える人すげえって思っていた&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;履歴書をPCで作成するやり方がわからない&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;大学の情報の授業は、ついていけずトラウマレベル&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;もちろん、キーボードを打つのも超絶遅くタッチタイピングもできなかった。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;p&gt;「いや嘘だろ盛っているだろ」って&lt;br &#x2F;&gt;
よく言われますが、&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ガチです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;我ながら恥ずかしいですが、&lt;br &#x2F;&gt;
平たく言えば、おばあちゃんのITリテラシーですね。&lt;br &#x2F;&gt;
（いや下手したらおばあちゃんにも負けていましたね)&lt;&#x2F;p&gt;
&lt;p&gt;とまあ、エンジニアどころか、&lt;br &#x2F;&gt;
一般的な社会人に必要なITスキルすら持ちわせていないレベルでした。&lt;br &#x2F;&gt;
(この話をするとたいてい信じてもらえないのですが、本当にこのレベルでした)&lt;&#x2F;p&gt;
&lt;p&gt;多分未経験からエンジニア勢で、&lt;br &#x2F;&gt;
私より酷いステータスでスタートしている人、&lt;br &#x2F;&gt;
いないんじゃないかっていうぐらいの状況でした。&lt;br &#x2F;&gt;
(いたら教えてください、語り合いましょう。)&lt;&#x2F;p&gt;
&lt;p&gt;大学時代は、文学専攻だったので、&lt;br &#x2F;&gt;
これだけひどいITリテラシーでも学生時代はそこまで困りませんでした。&lt;br &#x2F;&gt;
(卒論は、紙で提出しました)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、この状態なので、就活はやはりうまくいくはずもなく、&lt;br &#x2F;&gt;
&lt;strong&gt;どこからも内定をもらえず卒業することになりました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;いわゆる既卒というやつです。&lt;&#x2F;p&gt;
&lt;p&gt;私がエンジニアを志したのは、&lt;br &#x2F;&gt;
ちょうど既卒になったばかりぐらいのことです。&lt;&#x2F;p&gt;
&lt;p&gt;一応大学4年次に、少しだけITスキルを学んだので、&lt;br &#x2F;&gt;
上記のようなひどいITリテラシーの状態は多少は脱してはいましたが、&lt;br &#x2F;&gt;
それでもプログラミングは一ミリもやったことない状態からスタートしたのは事実です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-zu-du-xue-qi-jian&quot;&gt;既卒独学期間&lt;&#x2F;h2&gt;
&lt;p&gt;独学期間は、およそ半年ありました。&lt;&#x2F;p&gt;
&lt;p&gt;最初はHTML&#x2F;CSSから始め、&lt;br &#x2F;&gt;
JavaScript,PHP,Pythonなど色々な言語に手を出すという&lt;br &#x2F;&gt;
典型的な良くない学習で遠回りをしていました。&lt;&#x2F;p&gt;
&lt;p&gt;よくHTMLは簡単と言われますが、&lt;br &#x2F;&gt;
最初にHTMLを学んだときは、&lt;br &#x2F;&gt;
「どこが簡単なんだ」と強く思ったのを今でも覚えています。&lt;&#x2F;p&gt;
&lt;p&gt;そして、JavaScriptなどを学んでも全然わからず、&lt;br &#x2F;&gt;
PHPをやって、やっと少しプログラミングのコツがつかめるようになりました。&lt;br &#x2F;&gt;
ここまでに、大体3,4ヶ月はかかった気がします。&lt;&#x2F;p&gt;
&lt;p&gt;今思うと、JavaScriptって地味に面倒くさい概念がたくさん出てくるので、&lt;br &#x2F;&gt;
オーソドックスのようでいてオーソドックスでもないんですよね。&lt;br &#x2F;&gt;
(非同期処理、コールバック関数、オブジェクト(クラスじゃない方)などなど。そもそも&lt;br &#x2F;&gt;
JavaScriptだけフロントエンドという点でも他の言語と違いが出るのは当然といえば当然だが。)&lt;&#x2F;p&gt;
&lt;p&gt;その点、PHPは比較的素直で、とっつきやすいなというのが、&lt;br &#x2F;&gt;
当時の印象でした。正直私の場合は、ずっとJavaScriptだけやっていたら、&lt;br &#x2F;&gt;
よくわからなくて挫折していたかもしれません。&lt;br &#x2F;&gt;
&lt;strong&gt;独学で、自分の好きな言語を学べたので、PHPに手を出すことができたのは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;今思うと良かったなと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;PHPに関しては、易しい入門書があったのも大きかったです。&lt;br &#x2F;&gt;
下記の記事でも紹介しましたが、&lt;br &#x2F;&gt;
「気づけばプロ並みPHP」という本は、&lt;br &#x2F;&gt;
この時期では最もわかりやすく理解できた本でした。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1271&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;独学は、挫折率が高いと言われていますが、&lt;br &#x2F;&gt;
私の場合、最短ルートにこだわらず、&lt;br &#x2F;&gt;
&lt;mark&gt;あえてJavaScriptからPHPに寄り道したのが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;結果的に良かったなと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.sejuku.net&#x2F;blog&#x2F;109190&quot;&gt;https:&#x2F;&#x2F;www.sejuku.net&#x2F;blog&#x2F;109190&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なんだかんだで、プログラミング言語との相性もあると思うので、&lt;br &#x2F;&gt;
合わないなと感じたら、他の言語に手を出してみるのも手段の一つだと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dotutoinsutoru&quot;&gt;ドットインストール&lt;&#x2F;h3&gt;
&lt;p&gt;このとき、私が主に使っていた、&lt;br &#x2F;&gt;
学習ツールは、書籍とドットインストールというサイトでした。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dotinstall.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;dotinstall.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ドットインストールは、&lt;br &#x2F;&gt;
色々な分野を、浅く勉強できるのが最大の魅力です。&lt;br &#x2F;&gt;
よくProgateなども、未経験の人は、&lt;br &#x2F;&gt;
使っていることが多いと思いますが、&lt;br &#x2F;&gt;
Progateは環境構築を学べないので、&lt;br &#x2F;&gt;
個人的には微妙かなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ドットインストールは、&lt;br &#x2F;&gt;
動画をただぼーっと見ているだけでは、&lt;br &#x2F;&gt;
身につきませんが、自分で手を動かして、&lt;br &#x2F;&gt;
環境構築とかもすれば、Progateよりも実践的だと思うので、&lt;br &#x2F;&gt;
おすすめです。&lt;&#x2F;p&gt;
&lt;p&gt;私も当時は、ドットインストールで&lt;br &#x2F;&gt;
色々勉強していました。&lt;&#x2F;p&gt;
&lt;p&gt;私の場合、ドットインストールで少し勉強したぐらいの状態で、&lt;br &#x2F;&gt;
何回か面接を受けたのですが、&lt;br &#x2F;&gt;
コーディングテストで落ちまくりました。&lt;&#x2F;p&gt;
&lt;p&gt;あの超簡単なコーディングテストで有名な、&lt;br &#x2F;&gt;
Fizzbuzzでさえ、落ちました(笑)&lt;&#x2F;p&gt;
&lt;p&gt;その時、まだ一つの言語もマスターしておらず、&lt;br &#x2F;&gt;
つまみ食いばかりしていては、&lt;br &#x2F;&gt;
太刀打ちできないなと感じたのを覚えています。&lt;&#x2F;p&gt;
&lt;p&gt;そこで、そうしたコーディングテスト対策として、&lt;br &#x2F;&gt;
次は、競技プログラミングをやることにしました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jing-ji-puroguramingu&quot;&gt;競技プログラミング&lt;&#x2F;h3&gt;
&lt;p&gt;競技プログラミングでいえば、&lt;br &#x2F;&gt;
AtCoderがいちばん有名かと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;atcoder.jp&#x2F;&quot;&gt;https:&#x2F;&#x2F;atcoder.jp&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私も、例にもれずAtCoderをやりました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;AtCoderにある、最初はC++のチュートリアルを進めましたが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;さっぱりわかりませんでした笑&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;C++って、シンプルに難しいんですよね。&lt;br &#x2F;&gt;
今学習したとしてもしっかり理解できるか怪しいです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、実務未経験者が手を出す言語ではないですね。&lt;&#x2F;p&gt;
&lt;p&gt;それでC++ではだめだと感じ、&lt;br &#x2F;&gt;
二番目に人気があった、Pythonで競技プログラミングに取り組むことにしました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Pythonは文法がシンプルだったので、実務未経験の当時の私でも、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;比較的とっつきやすかったです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それからは、Pythonの学習に的を絞り、&lt;br &#x2F;&gt;
競技プログラミングの学習と並行して、&lt;br &#x2F;&gt;
Djangoと、Pythonの文法、アルゴリズムなども学んでいたりしました。&lt;&#x2F;p&gt;
&lt;p&gt;競技プログラミングをやると、&lt;br &#x2F;&gt;
周りの人のレベルが高すぎて結構心が折れそうになりました。&lt;&#x2F;p&gt;
&lt;p&gt;ネット上だと、コンテスト5回目ぐらいで、&lt;br &#x2F;&gt;
茶色になったとか、文系未経験数学苦手だけど、&lt;br &#x2F;&gt;
6回目で茶色になったとか、そういう方が多い印象でした。&lt;&#x2F;p&gt;
&lt;p&gt;私は、コンテスト12回ぐらい参加しても、&lt;br &#x2F;&gt;
レーティングは、200ぐらいまでしかいかず、&lt;br &#x2F;&gt;
結局ずっと灰色でした。&lt;&#x2F;p&gt;
&lt;p&gt;こういう現実に直面すると、&lt;br &#x2F;&gt;
「自分はやはり向いていないのかな」と思うことも、&lt;br &#x2F;&gt;
結構ありました。&lt;&#x2F;p&gt;
&lt;p&gt;しかし、実務を経験した今だからこそ、&lt;br &#x2F;&gt;
はっきりわかるのは、&lt;br &#x2F;&gt;
&lt;mark&gt;競技プログラミングのスキルと実務でのプログラミングスキルは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;必ずしも一致しないということです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;競技プログラミングの場合、地味に国語力も求められますし、&lt;br &#x2F;&gt;
計算量の見積もりや、いかに解法を思いつくかみたいなスキルが必要なのに対し、&lt;br &#x2F;&gt;
実務では、フレームワークをクリーンコードで記述できるかのような側面が&lt;br &#x2F;&gt;
重要になっていきます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;jobchange&#x2F;software-developer-gcfbb909f2_1920-1024x683.jpeg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;正直、現役エンジニアで競技プログラミングを&lt;br &#x2F;&gt;
やっていない人の方が多いです(笑)&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;strong&gt;競技プログラミングで良い成績を出せないからといって、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;エンジニアを諦める必要は全く無いです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;競技プログラミングのスキルは、&lt;br &#x2F;&gt;
基本的にアルゴリズム、国語力、数学力、&lt;br &#x2F;&gt;
解法ひらめき力、最後に実装力のような感じかなと思うので、&lt;br &#x2F;&gt;
実務とは、なんだかんだ違います。&lt;&#x2F;p&gt;
&lt;p&gt;そんな競技プログラミングですが、&lt;br &#x2F;&gt;
&lt;strong&gt;これに取り組んだこと自体は間違いなく役に立ちました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;まず、コーディングテストには落ちなくなりました。&lt;br &#x2F;&gt;
実務未経験の状態で、チームラボのプログラミングテストを受けましたが、&lt;br &#x2F;&gt;
普通に通りました。(チームラボは二次面接で落ちましたが)&lt;&#x2F;p&gt;
&lt;p&gt;あとは、Paizaとかのスキルチェックでも、&lt;br &#x2F;&gt;
Aぐらいまでは出せるようになったので、&lt;br &#x2F;&gt;
応募できる企業が増えたという利点もあります。&lt;&#x2F;p&gt;
&lt;p&gt;それに最大の利点は、Pythonという一つの言語を使って、&lt;br &#x2F;&gt;
取り組んだので、&lt;mark&gt;一つの言語をマスターするというかねてからの目的を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;達成できたことです&lt;&#x2F;mark&gt;(マスターというのは、実務未経験のレベル感でのことです)&lt;&#x2F;p&gt;
&lt;p&gt;また、実務に入ってからも、&lt;br &#x2F;&gt;
競技プログラミングを才能がないながらも、&lt;br &#x2F;&gt;
ゴリゴリやっていたおかげで、&lt;br &#x2F;&gt;
同じ未経験入社の人よりも、&lt;br &#x2F;&gt;
実装力やプログラムを書く力があるねと、&lt;br &#x2F;&gt;
先輩エンジニアに褒めてもらうことができました。&lt;&#x2F;p&gt;
&lt;p&gt;正直、ネット上にいる、&lt;br &#x2F;&gt;
競技プログラミングの猛者たちが、&lt;br &#x2F;&gt;
頭良すぎるだけで、&lt;br &#x2F;&gt;
大半の人は灰色レベルなんじゃないかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;現職で、情報系の学部を出た、&lt;br &#x2F;&gt;
輝かしい経歴の新卒の子が書いたコードなどを見ても、&lt;br &#x2F;&gt;
競技プログラミングをやっている自分からしたら、&lt;br &#x2F;&gt;
信じられない部分でつまづいているなと感じたこともありました。&lt;&#x2F;p&gt;
&lt;p&gt;当時灰色の私ですら、こう感じるのですから、&lt;br &#x2F;&gt;
緑以上のひとは、どうなってしまうのでしょう(笑)&lt;&#x2F;p&gt;
&lt;p&gt;いずれにしろ、&lt;strong&gt;実務未経験のときに、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;競技プログラミングをやっていたことは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;基本的なプログラミングスキルを磨く上で&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;大変役に立ちました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-ge-qu-de-lpic-level1toitpasupoto&quot;&gt;資格取得 LPIC level1とITパスポート&lt;&#x2F;h3&gt;
&lt;p&gt;競技プログラミング以外に、&lt;br &#x2F;&gt;
実務未経験のときに行ったことの中に、&lt;br &#x2F;&gt;
資格取得があります。&lt;&#x2F;p&gt;
&lt;p&gt;この実務未経験のときに、&lt;br &#x2F;&gt;
LPIC level1とITパスポートを取得しました。&lt;&#x2F;p&gt;
&lt;p&gt;ITパスポートは、正直対して意味なかったですが、&lt;br &#x2F;&gt;
LPIC level1は、とても勉強になりました。&lt;&#x2F;p&gt;
&lt;p&gt;ITパスポートは、会社で取らされることが多いと思いますが、&lt;br &#x2F;&gt;
私も、内定辞退した会社の最終課題で、&lt;br &#x2F;&gt;
ITパスポートの取得が命じられ、やむなく取得しました。&lt;&#x2F;p&gt;
&lt;p&gt;今思うと、ITパスポートを取得しないと、&lt;br &#x2F;&gt;
入社させないというスタンスだったので、&lt;br &#x2F;&gt;
まあまあのブラック企業かつ、体制が古い企業だったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;LPIC level 1も同じ会社に命じられた資格だったのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;こちらは奇しくも、めちゃくちゃ役に立ちました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;結局、資格取得を命じた会社自体は、&lt;br &#x2F;&gt;
とっとと内定辞退しましたが、&lt;br &#x2F;&gt;
LPIC level1の取得は、&lt;br &#x2F;&gt;
私の世界を大きく広げてくれたのを今でも覚えています。&lt;&#x2F;p&gt;
&lt;p&gt;まず、Linuxの世界にハマりました。&lt;&#x2F;p&gt;
&lt;p&gt;私のブログ名が、フルスタックLinuxプログラミングとあるのも、&lt;br &#x2F;&gt;
実は、原点にLinuxに感動したからというのもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;私がVimと出会ったのも、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;このLPIC level1の学習の際です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vimに惚れて、Linuxに惚れて、&lt;br &#x2F;&gt;
一気に私は、Linuxの世界が楽しくなりました。&lt;&#x2F;p&gt;
&lt;p&gt;なので、就職するときに、&lt;br &#x2F;&gt;
Linuxのサーバーエンジニアの方面に進もうかとも結構迷いました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、競技プログラミングをやっていたのもあり、&lt;br &#x2F;&gt;
私は、プログラミングスキルとLinuxの両方をやっていきたいという思いもあり、&lt;br &#x2F;&gt;
開発系に進むことにしました。&lt;&#x2F;p&gt;
&lt;p&gt;今思うと、この選択は正しかったと思います。&lt;br &#x2F;&gt;
サーバー系に進んでいたら、&lt;br &#x2F;&gt;
Linux自体には詳しくなれたかもしれませんが、&lt;br &#x2F;&gt;
NeovimのようなモダンなVimで開発などすることもなかったでしょうし、&lt;br &#x2F;&gt;
プログラミングを続けることもなかったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;それに、サーバーエンジニアは、&lt;br &#x2F;&gt;
クラウドなどを除くと、&lt;br &#x2F;&gt;
割とレガシー化もしているので、&lt;br &#x2F;&gt;
転職リスクも企業によってはあるなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;特に、実務未経験の状態で入社する、&lt;br &#x2F;&gt;
サーバーエンジニアは、大半は保守運用などに回されることが多く、&lt;br &#x2F;&gt;
スキルを伸ばしにくいキャリアになっていたかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;その点でも、私は開発系に進んでよかったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Linuxは、Webエンジニアにとっても、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;必須の知識です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;LPIC level1は、これだけは知っておきたいLinuxの基本を学べるので、&lt;br &#x2F;&gt;
未経験の人は、取得を検討してみてもいいのかなと思います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;potohuoriozuo-cheng&quot;&gt;ポートフォリオ作成&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんなこんなで、&lt;br &#x2F;&gt;
私は資格取得をしたり、&lt;br &#x2F;&gt;
競技プログラミングをしたりと執心していましたが、&lt;br &#x2F;&gt;
肝心のポートフォリオを作っていませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;ポートフォリオの作成よりも、&lt;br &#x2F;&gt;
競技プログラミングや、Linuxの方が楽しかったというのが本音です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ポートフォリオがないと、&lt;br &#x2F;&gt;
未経験だと何かと厳しいので、&lt;br &#x2F;&gt;
8月ぐらいに作成に取り掛かりました。&lt;&#x2F;p&gt;
&lt;p&gt;私は、Pythonでゴリゴリ競技プログラミングをやっていたので、&lt;br &#x2F;&gt;
ポートフォリオもPythonでやりたいという思いが強かったので、&lt;br &#x2F;&gt;
&lt;strong&gt;Python WebフレームワークのDjangoで作成しました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;簡単な性格診断アプリのようなものを作りました。&lt;&#x2F;p&gt;
&lt;p&gt;今振り返ると、かなりクオリティ低かったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;JSフレームワークは、&lt;br &#x2F;&gt;
使いませんでしたし、もちろん&lt;br &#x2F;&gt;
Dockerなんかも使っていません。&lt;&#x2F;p&gt;
&lt;p&gt;まあそれでも、無いよりはマシだっと思います。&lt;&#x2F;p&gt;
&lt;p&gt;私のときは、これぐらいのクオリティでも、&lt;br &#x2F;&gt;
ギリギリ滑り込めましたが、最近は、&lt;br &#x2F;&gt;
実務未経験者に対するハードルが高くなっているようで、&lt;br &#x2F;&gt;
ポートフォリオに求められる水準も上がっていると聞きました。&lt;&#x2F;p&gt;
&lt;p&gt;なので、私は運が良かったです。&lt;br &#x2F;&gt;
今わたしが未経験だとして、&lt;br &#x2F;&gt;
就活していたら、果たして就職できていたかどうかと&lt;br &#x2F;&gt;
感じます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nei-ding-xian-tonomian-jie&quot;&gt;内定先との面接&lt;&#x2F;h3&gt;
&lt;p&gt;さてそんなこんなで、&lt;br &#x2F;&gt;
内定をもらうことになる会社の面接を受けました。&lt;&#x2F;p&gt;
&lt;p&gt;ここは、私が入社したところですが、&lt;br &#x2F;&gt;
&lt;strong&gt;Web系の自社受託開発の会社でした。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これだけ聞くと、まあまあ入社難易度高そうですが、&lt;br &#x2F;&gt;
ここは、未経験者も採用するというスタンスのところでした。&lt;&#x2F;p&gt;
&lt;p&gt;この会社を受けているときは、&lt;br &#x2F;&gt;
まだポートフォリオは完成していなかったんですが、&lt;&#x2F;p&gt;
&lt;p&gt;結局ポートフォリオが完成しないまま、&lt;br &#x2F;&gt;
内定をもらうことができました。&lt;&#x2F;p&gt;
&lt;p&gt;入社したここの企業の面接では、一度もポートフォリオを&lt;br &#x2F;&gt;
掲示せずに終わりました(笑)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;決めては、面接官との相性と、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;技術に対する興味でした。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;というのも、その会社の一次面接の際に、&lt;br &#x2F;&gt;
色々技術的な質問をされたのですが、&lt;br &#x2F;&gt;
釈然とした回答ができませんでした。&lt;&#x2F;p&gt;
&lt;p&gt;もう落ちたなと思っていました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;jobchange&#x2F;sunset-g3046cae10_1920-1024x681.jpeg&quot; alt=&quot;黄昏の風景&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、面接終了間際に、&lt;br &#x2F;&gt;
「何か趣味はありますか？」と聞かれて、&lt;br &#x2F;&gt;
音楽の話をしたら、その面接官の方と打ち解けて&lt;br &#x2F;&gt;
最終面接に進むことができました。&lt;&#x2F;p&gt;
&lt;p&gt;超絶ラッキーでした。&lt;br &#x2F;&gt;
もし違う面接官なら落ちていたでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ぶっちゃけ実務未経験の状態だと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;運とかの要素も大きいかもしれません&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最終面接は、技術が好きかどうかを聞かれ、&lt;br &#x2F;&gt;
私の場合は、Linuxを普段使いしている旨と、&lt;br &#x2F;&gt;
今まで独学でプログラミングをやってきたことを&lt;br &#x2F;&gt;
色々話したら熱意が伝わったようで、&lt;br &#x2F;&gt;
ギリギリで採用してもらえました。&lt;&#x2F;p&gt;
&lt;p&gt;ギリギリの理由としては、&lt;br &#x2F;&gt;
一週間半ぐらい音沙汰がなく、&lt;br &#x2F;&gt;
こっちから「どうでしょうか？」と連絡をしたら、&lt;br &#x2F;&gt;
「選考に時間を要しましたが、たった今通過として決定しました」と、&lt;br &#x2F;&gt;
なんとも悩ましい採用だったからです。&lt;&#x2F;p&gt;
&lt;p&gt;ポートフォリオは正直あんま関係なかったです笑&lt;&#x2F;p&gt;
&lt;p&gt;こうして、ギリギリでエンジニアの世界にすべりこめました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;zi-she-sabisunitiao-zhan&quot;&gt;自社サービスに挑戦&lt;&#x2F;h3&gt;
&lt;p&gt;そうして、内定をもらうことはできたのですが、&lt;br &#x2F;&gt;
このあたりから、自惚れ始めて、&lt;br &#x2F;&gt;
「自社サービスも受かるんじゃね」と思うようになりました。&lt;&#x2F;p&gt;
&lt;p&gt;正直、同時進行で自社サービスもいくつか受けていたのもあり、&lt;br &#x2F;&gt;
そちらの結果を見てから、内定承諾をしようと思いました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ポートフォリオは、この自社サービスの面接で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;使用しました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一社目は、まあまあ有名な某メガベンチャーですが、&lt;br &#x2F;&gt;
採用難易度はそこまで高くない、あそこです。&lt;&#x2F;p&gt;
&lt;p&gt;二次面接まで行きましたが、&lt;br &#x2F;&gt;
企業風土とのアンマッチと、&lt;br &#x2F;&gt;
技術面接で、同社のレベルに達していないと&lt;br &#x2F;&gt;
判断され、落ちました。&lt;&#x2F;p&gt;
&lt;p&gt;まあ今思うと、あのポートフォリオなら、&lt;br &#x2F;&gt;
そりゃそうだなという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;二社目は、正確には事業会社ではありませんが、&lt;br &#x2F;&gt;
某イケイケWeb系受託開発をしているメガベンチャーです。&lt;&#x2F;p&gt;
&lt;p&gt;ここも二次面接で落ちました。&lt;br &#x2F;&gt;
まあ、ここは、もちろん技術水準に達していないという&lt;br &#x2F;&gt;
点もあったと思いますが、面接官との相性が悪かったというのも&lt;br &#x2F;&gt;
あったと思います。&lt;&#x2F;p&gt;
&lt;p&gt;全く話が盛り上がりませんでしたし、&lt;br &#x2F;&gt;
どうにもとっつきにくい感じの人でした。&lt;&#x2F;p&gt;
&lt;p&gt;というわけで、見事に両方落ちたので、&lt;br &#x2F;&gt;
最初に内定をもらった会社に入社しました。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-wu-niru-tutemite&quot;&gt;実務に入ってみて&lt;&#x2F;h2&gt;
&lt;p&gt;そうして、就職したのですが、&lt;br &#x2F;&gt;
当然といえば当然ですが、&lt;br &#x2F;&gt;
&lt;strong&gt;実務のレベルは高かったです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私がそのとき、就職したのは、&lt;br &#x2F;&gt;
Web系の受託開発企業でした。&lt;&#x2F;p&gt;
&lt;p&gt;実務未経験にしては、良い環境で&lt;br &#x2F;&gt;
プライム案件も多く、しっかり開発の経験を積める上に、&lt;br &#x2F;&gt;
週四リモートワークができる、自由な社風の会社でした。&lt;&#x2F;p&gt;
&lt;p&gt;とはいえ、最初の研修の時点から躓くことが多くて、&lt;br &#x2F;&gt;
わからないことだらけでした。&lt;&#x2F;p&gt;
&lt;p&gt;研修ではRubyとRailsをみっちりやらされたのですが、&lt;br &#x2F;&gt;
どちらも独学のときにやっていなかったので、&lt;br &#x2F;&gt;
初めての部分が多く結構苦労しました。&lt;&#x2F;p&gt;
&lt;p&gt;あと、地味にGitなどについても、&lt;br &#x2F;&gt;
改めて学習して、かなり勉強になりました。&lt;&#x2F;p&gt;
&lt;p&gt;あと、PR形式でレビューを先輩エンジニアにお願いするという形式も&lt;br &#x2F;&gt;
&lt;strong&gt;独学ではなかなか経験できないものだったので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
**大変刺激的でした。**特にテストコードなどは、&lt;br &#x2F;&gt;
このとき存在自体も、書き方自体も初めて学びました。&lt;&#x2F;p&gt;
&lt;p&gt;研修なので、厳密には実務ではないですが、&lt;br &#x2F;&gt;
後にも先にも、あそこまでみっちりコードレビュしてくれたことは、&lt;br &#x2F;&gt;
ないような気がします。&lt;&#x2F;p&gt;
&lt;p&gt;この研修で、実務のプログラミングと、&lt;br &#x2F;&gt;
独学のプログラミングの大きな違いを学ぶことができました。&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、&lt;&#x2F;p&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;独学&lt;&#x2F;td&gt;&lt;td&gt;実務&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;スタンス&lt;&#x2F;td&gt;&lt;td&gt;なんとなく動いたで書いている&lt;&#x2F;td&gt;&lt;td&gt;挙動を説明できないコードを書いてはいけない&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;テストコード&lt;&#x2F;td&gt;&lt;td&gt;もちろん書いてない&lt;&#x2F;td&gt;&lt;td&gt;書くのが一般的&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;参照のスタンス&lt;&#x2F;td&gt;&lt;td&gt;Qiitaとか、調べて一番最初に出てきたものを理解しないまま片っ端から試す&lt;&#x2F;td&gt;&lt;td&gt;公式ドキュメントを参照し、理解出来ないコードを安易にコピペしない&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;使う技術&lt;&#x2F;td&gt;&lt;td&gt;プログラミング言語とフレームワークとgitなど限定的&lt;&#x2F;td&gt;&lt;td&gt;プログラミング言語、フレームワーク以外にも、様々な周辺技術を使い、管理する。&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;コード&lt;&#x2F;td&gt;&lt;td&gt;命名などが汚く、冗長な部分が多い&lt;&#x2F;td&gt;&lt;td&gt;命名を洗練させ、冗長な部分をクラスや関数などにする&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;p&gt;これ以外にもたくさんあるでしょうが、&lt;br &#x2F;&gt;
こういった独学から実務へのマインドチェンジをこの研修で&lt;br &#x2F;&gt;
行うことができたのは、かなり大きい成長だったなと今でも思います。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;独学のときは、それはそれで大変でしたが、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;実務を経験して、いかに自分がひどいコードを書いていたのか痛感しますね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;この研修のときに、&lt;br &#x2F;&gt;
メンターをしてくれたエンジニアの方の&lt;br &#x2F;&gt;
教えてくれたことは、本当に勉強になりました。&lt;&#x2F;p&gt;
&lt;p&gt;やはり誰かに教えてもらえるって最高ですね。&lt;br &#x2F;&gt;
&lt;strong&gt;今思うと、プログラミングスクールも全然ありだし、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;近道なのかもしれないと思うぐらいです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、おすすめのプログラミングスクールについては、&lt;br &#x2F;&gt;
下記の記事で紹介しているので、興味がある方は、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1139&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wen-xi-wei-jing-yan-narazui-di-demoban-nian-hahosii&quot;&gt;文系未経験なら最低でも半年はほしい&lt;&#x2F;h2&gt;
&lt;p&gt;さて、ざっと独学期間から最初の企業の転職まで振り返りましたが、&lt;br &#x2F;&gt;
いざ文系未経験からエンジニアを目指すなら、&lt;br &#x2F;&gt;
最低でも半年の学習期間がほしいと考えます。&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、&lt;&#x2F;p&gt;
&lt;p&gt;[st-mybox title=&quot;注意ポイント&quot; webicon=&quot;st-svg-exclamation-circle&quot; color=&quot;#ef5350&quot; bordercolor=&quot;#ef9a9a&quot; bgcolor=&quot;#ffebee&quot; borderwidth=&quot;2&quot; borderradius=&quot;5&quot; titleweight=&quot;bold&quot; fontsize=&quot;&quot; myclass=&quot;st-mybox-class&quot; margin=&quot;25px 0 25px 0&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;最低半年勉強しないとプログラミングに慣れようがない&lt;&#x2F;li&gt;
&lt;li&gt;試行錯誤した経験が必要&lt;&#x2F;li&gt;
&lt;li&gt;学習分野が多いのと、半年未満では短すぎる&lt;&#x2F;li&gt;
&lt;li&gt;そもそも技術が好きなのかどうか見極める期間としても重要&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;実務未経験の場合、&lt;br &#x2F;&gt;
ポテンシャルを感じさせることが重要です。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ポートフォリオよりも、&lt;br &#x2F;&gt;
「この人はいずれエンジニアとして戦力になってくれる」と&lt;br &#x2F;&gt;
面接官に思わせなくてはいけません。&lt;&#x2F;p&gt;
&lt;p&gt;そのためには、半年ぐらいは、&lt;br &#x2F;&gt;
技術に向き合って、それに対する熱意を語れるぐらいにならないと&lt;br &#x2F;&gt;
難しいでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、長すぎても、&lt;br &#x2F;&gt;
実務デビューが遅れるだけなので、&lt;br &#x2F;&gt;
せいぜい半年から一年ぐらいがベストでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、今思うと、必ずしも&lt;strong&gt;独学でエンジニアを目指すよりも、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;就職難易度が低いSESなどに就職して、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;手っ取り早く実務経験を積んでしまうのも戦略の一つだなと思うようになりました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;enzinianinarutamenibi-yao-namaindo&quot;&gt;エンジニアになるために必要なマインド&lt;&#x2F;h3&gt;
&lt;p&gt;エンジニアは、働きやすい環境が多いので、&lt;br &#x2F;&gt;
それに魅力を感じて、目指している人も多いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、&lt;strong&gt;エンジニアは、想像以上に一日中PCと向き合って、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;プログラムと向き合う仕事です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そういうことが苦にならない人じゃないと、&lt;br &#x2F;&gt;
続けるのは難しいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;それに、長期的には、&lt;br &#x2F;&gt;
技術に対する興味がないと、&lt;br &#x2F;&gt;
続けられないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、エンジニアを目指している方は、&lt;br &#x2F;&gt;
&lt;mark&gt;「自分はどういう技術を極めていきたいか」&lt;&#x2F;mark&gt;ということを&lt;br &#x2F;&gt;
しっかり答えられるようにしておくべきだと思います。&lt;&#x2F;p&gt;
&lt;p&gt;面接でも、どのような技術が好きか聞かれることもあるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、企業のスタンスによっても異なるので、&lt;br &#x2F;&gt;
未経験の場合、技術に対する熱意よりも、&lt;br &#x2F;&gt;
論理的思考とかを重視するという企業もあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、自社サービスとか、技術に強い会社に就職しようと思ったら、&lt;br &#x2F;&gt;
何らかの形で技術に対する質問はしてくるはずです。&lt;br &#x2F;&gt;
（そして大抵、そういう企業が働きやすい企業だったりします。)&lt;&#x2F;p&gt;
&lt;p&gt;好きな技術とか、&lt;br &#x2F;&gt;
今興味がある技術はありますか？という質問に対し、&lt;br &#x2F;&gt;
「AIとか自動運転に興味があります」みたいに答えてしまうと、&lt;br &#x2F;&gt;
「それは大抵の人が興味があるって答えるし、誰でも知っている技術なんだよな」&lt;br &#x2F;&gt;
という印象を与えかねません。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、AIや自動運転について、&lt;br &#x2F;&gt;
専門的に研究されている方であれば、&lt;br &#x2F;&gt;
上記のように答えても問題ありませんが、&lt;br &#x2F;&gt;
そうでない場合は、避けておいた方が良いでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、正解などない質問ですが、&lt;br &#x2F;&gt;
私だったら、「LinuxやVimなどが好きなので、最近はWindows PCに&lt;br &#x2F;&gt;
ubuntu desktopをインストールして、この面接もこのubuntuで受けています。プログラム開発に際し、&lt;br &#x2F;&gt;
Vimを使用しているのですが、より開発効率を探求するために、AstroNvimや、プラグインなどの&lt;br &#x2F;&gt;
模索にハマっております。」&lt;&#x2F;p&gt;
&lt;p&gt;のように答えます。&lt;&#x2F;p&gt;
&lt;p&gt;中途採用の面接だったら、上記だとそこまで好印象でもないかもしれませんが、&lt;br &#x2F;&gt;
実務未経験者に対する質問の回答としては、十分な回答だと思います。&lt;&#x2F;p&gt;
&lt;p&gt;重要なことは、好きな技術が好きで、どういうことをしているのか、&lt;br &#x2F;&gt;
語れるとベストです。&lt;strong&gt;みんな自分の好きなことであれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;一心不乱に語り始めると思いますが、それと同じことができれば、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;完璧です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;技術フリークな人は、歓迎されるので、&lt;br &#x2F;&gt;
それっぽく見せましょう。（まあ見抜かれることも多いので、&lt;br &#x2F;&gt;
ほどほどが一番ですが)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mian-qiang-surubekifen-ye&quot;&gt;勉強するべき分野&lt;&#x2F;h3&gt;
&lt;p&gt;さて、最後に具体的に、&lt;br &#x2F;&gt;
どういう勉強をしたらいいのか触れます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば&lt;&#x2F;p&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;プログラミング言語一つ&lt;&#x2F;li&gt;
&lt;li&gt;フレームワーク&lt;&#x2F;li&gt;
&lt;li&gt;HTML&#x2F;CSS JavaScript&lt;&#x2F;li&gt;
&lt;li&gt;Linux&lt;&#x2F;li&gt;
&lt;li&gt;Git&lt;&#x2F;li&gt;
&lt;li&gt;Docker&lt;&#x2F;li&gt;
&lt;li&gt;SQL&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;p&gt;絞ったらこれぐらいですが、&lt;br &#x2F;&gt;
これ以外にも勉強しておくに越したことはないものは、&lt;br &#x2F;&gt;
たくさんあります。&lt;&#x2F;p&gt;
&lt;p&gt;私の場合、Vimとかも勉強していました。&lt;br &#x2F;&gt;
(Vimの解説記事は、たくさんあげているので、&lt;br &#x2F;&gt;
良ければご参考ください。)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;category&#x2F;cli-tool&#x2F;&quot;&gt;https:&#x2F;&#x2F;reisuta.com&#x2F;category&#x2F;cli-tool&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これらをちゃんとまなぼうとしたら余裕で&lt;br &#x2F;&gt;
半年以上はかかると思われる。&lt;&#x2F;p&gt;
&lt;p&gt;どのようなエンジニアを目指すかによっても、&lt;br &#x2F;&gt;
変わってくると思いますが、&lt;br &#x2F;&gt;
上記の勉強は必要になるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;未経験からエンジニアを目指すのに必要な勉強の詳細については、&lt;br &#x2F;&gt;
既に紹介しましたが、下記の記事でも言及しているので、&lt;br &#x2F;&gt;
こちらもご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1139&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【M1 Macbook AirでUbuntu】リモートデスクトップ経由で接続</title>
        <published>2022-12-24T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/m1-ubuntu/"/>
        <id>https://reisuta.com/m1-ubuntu/</id>
        
        <content type="html" xml:base="https://reisuta.com/m1-ubuntu/">&lt;p&gt;皆さんは、M1Macとかで、&lt;br &#x2F;&gt;
LinuxtのGUIを開いてみたいと思ったことはないでしょうか？&lt;&#x2F;p&gt;
&lt;p&gt;M1だと、以前のintel製Macのように、&lt;br &#x2F;&gt;
気軽にデュアルブートでLinuxを入れるなんていうことができなくなってしまったので、&lt;br &#x2F;&gt;
悲しみにくれている人も多いのではないでしょうか？(わたしです)&lt;&#x2F;p&gt;
&lt;p&gt;そこで、&lt;mark&gt;本記事では、M1でUbuntuデスクトップを開くために、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Dockerコンテナとリモートデスクトップを使って、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;検証してみようと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;どちらかというと、&lt;br &#x2F;&gt;
お遊びの検証なので、&lt;br &#x2F;&gt;
一ミリも実践的じゃないので、&lt;br &#x2F;&gt;
ご了承ください。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、記事の内容上、&lt;br &#x2F;&gt;
動画の方がわかりやすいかもしれないので、&lt;br &#x2F;&gt;
同内容の動画を貼っておきます。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;uKpw2MOX-_Q&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;m1denoqian-zhun-bei&quot;&gt;M1での前準備&lt;&#x2F;h2&gt;
&lt;p&gt;さて、早速取り掛かっていきたいのですが、&lt;br &#x2F;&gt;
本記事ではDockerを使うので、&lt;br &#x2F;&gt;
Dockerの基礎知識や環境構築を済ませていない方は、&lt;br &#x2F;&gt;
先に&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;docker-basic&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;を読んでからのほうが、&lt;br &#x2F;&gt;
理解しやすいかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;1077&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;以下、Dockerの環境がある前提で&lt;br &#x2F;&gt;
進めていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ubuntukontenawoli-teru&quot;&gt;Ubuntuコンテナを立てる&lt;&#x2F;h3&gt;
&lt;p&gt;公式のubuntuのイメージを取得し、&lt;br &#x2F;&gt;
コンテナを立ち上げます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; pull ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -itd --privileged -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 13389:3389&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ubuntu-desktop ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コンテナに入ります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -it&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ubuntu-desktop &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;コンテナに入ったら、&lt;br &#x2F;&gt;
色々インストールしていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bi-yao-naraiburarideng-insutoru&quot;&gt;必要なライブラリ等インストール&lt;&#x2F;h3&gt;
&lt;p&gt;色々必要なやつをインストールしていきます。&lt;&#x2F;p&gt;
&lt;p&gt;今回は、xrdpとubuntu-desktopを&lt;br &#x2F;&gt;
apt経由でインストールします。&lt;&#x2F;p&gt;
&lt;p&gt;xrdpとは、リモートデスクトップを実現するために必要なプロトコルである、&lt;br &#x2F;&gt;
RDPの機能を提供するOSSです。&lt;&#x2F;p&gt;
&lt;p&gt;ubuntu-desktopは、その名の通り、&lt;br &#x2F;&gt;
ubuntuのデスクトップ環境ですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;そのためxrdpとデスクトップ環境である、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;ubuntu-desktopを入れないと始まらないので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;以下コマンドでインストールします。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install systemd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install xrdp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install ubuntu-desktop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;入れ終わったら、&lt;br &#x2F;&gt;
一旦コンテナからexitします。&lt;&#x2F;p&gt;
&lt;p&gt;コンテナを停止しないと、&lt;br &#x2F;&gt;
Bind for 0.0.0.0:13389 failed: port is already allocated.&lt;br &#x2F;&gt;
のようにすでにポートが埋まっているというエラー にこの先出くわすので、&lt;br &#x2F;&gt;
一旦止めます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; stop ubuntu-desktop&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;264495fc-b6a8-feb9-2e83-a113bcc4ab13.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.07.32.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;imeziwobao-cun-suru&quot;&gt;イメージを保存する&lt;&#x2F;h3&gt;
&lt;p&gt;今色々インストールしたコンテナをイメージとしてコミットし、&lt;br &#x2F;&gt;
そのイメージ経由で立ち上げてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; commit  6a77e56ccb22 ubuntu-desktop:ubuntu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -itd --privileged -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; 13389:3389&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ubuntu-test ubuntu-desktop:ubuntu &#x2F;sbin&#x2F;init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; exec&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -it&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ubuntu-test &#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;あとは、デフォルトだとrootユーザのパスワードはないようなので、&lt;br &#x2F;&gt;
passwdコマンドで設定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;passwd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;cc8438a3-3b0b-cc80-7c0b-a09d7e8c97bc.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.14.18.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さてこれで準備完了です。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rimotodesukutotupudeubuntunijie-sok&quot;&gt;リモートデスクトップでUbuntuに接続&lt;&#x2F;h2&gt;
&lt;p&gt;次に、リモートデスクトップが必要なので、&lt;br &#x2F;&gt;
インストールしておきましょう。&lt;&#x2F;p&gt;
&lt;p&gt;app storeとかで、&lt;br &#x2F;&gt;
Microsoftリモートデスクトップって検索すれば、&lt;br &#x2F;&gt;
出てくると思うので、インストールします。&lt;br &#x2F;&gt;
(他のリモートデスクトップでも行けると思いますが、&lt;br &#x2F;&gt;
本記事では、Microsoftリモートデスクトップを使用します。)&lt;&#x2F;p&gt;
&lt;p&gt;Microsortリモートデスクトップで、&lt;br &#x2F;&gt;
localhost:13389にアクセスします。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;a4240725-7f9a-d4af-7f9b-b12c2619513e.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.15.14.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ユーザ名:rootで、&lt;br &#x2F;&gt;
パスワード:設定したもので接続します。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;3b99b939-038b-e677-9d0d-4ef9df37207b.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.15.32.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;いけたっぽいです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;f021a58b-11b5-44d0-98c5-4d0e012ab0df.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.15.54.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;最初の状態だと、なぜかfirefoxが入っていないので、&lt;br &#x2F;&gt;
リモートデスクトップ先でインストールしてみます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;m1-ubuntu&#x2F;ab2b2a8d-a160-f0c6-20bb-00e7a4e9b024.png&quot; alt=&quot;Screenshot 2022-12-24 at 15.18.18.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;私の環境では結構時間かかりましたが、&lt;br &#x2F;&gt;
インストールできました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yatutemitagan-xiang&quot;&gt;やってみた感想&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;正直体感としては、やや重くて&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;実用に堪えるものではない気がしました。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ubuntuを使いたいならおとなしく、&lt;br &#x2F;&gt;
PCにそのまんまインストールしたほうがいいかもしれないですね。&lt;&#x2F;p&gt;
&lt;p&gt;そうなると、やはりMacではなくWindowsという&lt;br &#x2F;&gt;
例の宗教戦争に突入するので、&lt;br &#x2F;&gt;
ここではこれ以上踏み込みません。&lt;&#x2F;p&gt;
&lt;p&gt;なお、ここまでやっておいてあれですが、、&lt;br &#x2F;&gt;
こういうやつもあるので、&lt;br &#x2F;&gt;
こっちのほうがサクッと作れるかもしれないので、&lt;br &#x2F;&gt;
興味がある方は、ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;uphy&#x2F;ubuntu-desktop-jp&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;uphy&#x2F;ubuntu-desktop-jp&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>TypeScriptのオブジェクトとは何か？型の付け方とジェネリクス</title>
        <published>2022-12-24T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/ts-object/"/>
        <id>https://reisuta.com/ts-object/</id>
        
        <content type="html" xml:base="https://reisuta.com/ts-object/">&lt;h2 id=&quot;obuziekutotohahe-ka&quot;&gt;オブジェクトとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;下記の記事で紹介したプリミティブ型という基本的な7つの型以外のものを、&lt;br &#x2F;&gt;
オブジェクトといいます。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;23&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;具体的には、&lt;mark&gt;string、number&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;bigint、boolean、undefined&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;symbol、null以外の型のことですね。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;他の言語だと、オブジェクト = クラスなどに結び付けられがちですが、&lt;br &#x2F;&gt;
TypeScriptの場合、&lt;strong&gt;クラスだけにとどまらない、広い範囲を含むのが特徴です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、JavaScriptやTypeScriptの大きな特徴かなと思いまして、&lt;br &#x2F;&gt;
最初はまあまあ戸惑うかなとおもいます。&lt;&#x2F;p&gt;
&lt;p&gt;代表的なものとしては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(val.obj1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 123と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;こんな感じのコードがあげられます。&lt;&#x2F;p&gt;
&lt;p&gt;定義方法としては、&lt;br &#x2F;&gt;
{}の中に、&lt;strong&gt;プロパティ名(キー):値&lt;&#x2F;strong&gt;と定義します。&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトの中身(プロパティ)を得ている、&lt;br &#x2F;&gt;
&lt;strong&gt;console.log(val.obj1)の部分は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;プロパティアクセスに当たります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにプロパティアクセスの方法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(val[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;obj1&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 123と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような記法もあります。&lt;&#x2F;p&gt;
&lt;p&gt;いくつかのデータをまとめて管理したいときなどに、&lt;br &#x2F;&gt;
オブジェクトが利用されることが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;なお、省略記法もあり、&lt;br &#x2F;&gt;
例えば次のようにかけます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;省略しない書き方&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello World&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; user1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    hello: hello,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 28&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(user1.hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;省略記法&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello World&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; user1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    hello,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 28&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(user1.hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;変数名とプロパティ名が同じ場合、&lt;br &#x2F;&gt;
&lt;strong&gt;: 変数名&lt;&#x2F;strong&gt;の部分を省略できます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記のような省略記法については、&lt;br &#x2F;&gt;
何だかんだでそんなに遭遇したことがないので、&lt;br &#x2F;&gt;
どこまで浸透しているのかは微妙なところです。&lt;&#x2F;p&gt;
&lt;p&gt;可読性という観点では、&lt;br &#x2F;&gt;
正直どちらがいいとは断定しづらいですね。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;obuziekutonoxing&quot;&gt;オブジェクトの型&lt;&#x2F;h2&gt;
&lt;p&gt;オブジェクトの型は、&lt;br &#x2F;&gt;
例えば次のように記述します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; { &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(val.obj1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; 123と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;「うん？どれが型だ？&lt;br &#x2F;&gt;
うじゃうじゃしているな」って思った方もいるかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;この場合、&lt;strong&gt;変数valの型は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;{ obj1: number, obj2: string }型となります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;複数の値に対してそれぞれ型を定義しているだけで、&lt;br &#x2F;&gt;
一つ一つについては、プリミティブのときと同様ではあります。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;mark&gt;上記のvalオブジェクトは、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;obj1がnumberで、obj2がstringの構造をもつ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;オブジェクトだということで、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;上記のような型になっています。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、記述が長くなるので、&lt;br &#x2F;&gt;
type文を使うことが実際には多いです。&lt;&#x2F;p&gt;
&lt;p&gt;type文とは、自分で&lt;br &#x2F;&gt;
カスタムの型を宣言する文法記法のようなものです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(val.obj1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;type文で宣言した型は、&lt;br &#x2F;&gt;
上記のように型注釈に記載できます。&lt;&#x2F;p&gt;
&lt;p&gt;これだとvalの定義自体は簡潔になった感じがしますよね。&lt;&#x2F;p&gt;
&lt;p&gt;type文は、上記のように、&lt;br &#x2F;&gt;
型を宣言する構文です&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;すでに存在する型に対して、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;別名をつけることができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;よくある使い方としては、&lt;br &#x2F;&gt;
typeの宣言を別のtypesディレクトリのようなものに切り出して、&lt;br &#x2F;&gt;
まとめて宣言して、各ファイルでそれぞれの型を呼び出すようにすると、&lt;br &#x2F;&gt;
見通しが良くなるかなと思います。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xing-yin-shu-zienerikusu&quot;&gt;型引数(ジェネリクス)&lt;&#x2F;h2&gt;
&lt;p&gt;上記のtype文と関連して、&lt;br &#x2F;&gt;
型引数という、type文の中でだけ有効な型として&lt;br &#x2F;&gt;
扱えるものがあります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;このような型引数を持つ型は、&lt;br &#x2F;&gt;
ジェネリック型といいます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の型を実際に使う場合は、&lt;br &#x2F;&gt;
引数に型を指定します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、&lt;br &#x2F;&gt;
stringが引数に渡されているので、&lt;br &#x2F;&gt;
valobj型のTはstringとなり、&lt;br &#x2F;&gt;
{ obj1: number, obj2: string }型と同様になります。&lt;&#x2F;p&gt;
&lt;p&gt;このあたりは、関数の引数と&lt;br &#x2F;&gt;
似ていますね。&lt;&#x2F;p&gt;
&lt;p&gt;なお型引数を指定した場合、&lt;br &#x2F;&gt;
呼び出し側で引数を指定しないと、&lt;br &#x2F;&gt;
コンパイルエラーになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;型引数なしでは呼び出せない。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;そのため、省略可能なオプショナルな型引数にする場合は、&lt;br &#x2F;&gt;
予めデフォルト値を定義しておく必要があります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;type&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;T&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; val&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;valobj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj1:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    obj2:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、型引数が指定されないと、&lt;br &#x2F;&gt;
Tはstring型になります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pei-lie&quot;&gt;配列&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;mark&gt;配列は、[]で定義される、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;複数のデータをまとめたデータ構造で、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;オブジェクトの一種です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;配列については、他のプログラミング言語でも&lt;br &#x2F;&gt;
嫌というほど見ていると思うので、&lt;br &#x2F;&gt;
イメージしやすいかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;平たく言えば、複数のデータが入っている箱のような感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptだと、下記のように配列定義します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;alice&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(arr)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;arrという変数に[&#x27;hello&#x27;, &#x27;alice&#x27;, 123]というものが代入されていますね。&lt;&#x2F;p&gt;
&lt;p&gt;これは、&#x27;hello&#x27;、&#x27;alice&#x27;、123の3つの値が、&lt;br &#x2F;&gt;
arrという配列の変数に格納されている感じです。&lt;&#x2F;p&gt;
&lt;p&gt;通常の変数であれば、&lt;br &#x2F;&gt;
一対一に対応していましたが、&lt;br &#x2F;&gt;
オブジェクトのように、一対複数のように定義できるのが、&lt;br &#x2F;&gt;
配列の特徴です。&lt;&#x2F;p&gt;
&lt;p&gt;配列の値にアクセスするには、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;arr[0]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;と番号を指定します。&lt;&#x2F;p&gt;
&lt;p&gt;0始まりからなので、先頭の要素は、&lt;br &#x2F;&gt;
arr[0]というふうに取得します。&lt;&#x2F;p&gt;
&lt;p&gt;arr[0]だと、上記の場合、&lt;br &#x2F;&gt;
&#x27;hello&#x27;の文字列が取得できます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、プログラミング言語によっては、&lt;br &#x2F;&gt;
0ではなく、1スタートだったりすることもありますが、&lt;br &#x2F;&gt;
基本的には0スタートの言語が多いです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;TypeScriptにおける配列は、上記の番号、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;0とか1といったプロパティ名を持つ、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;オブジェクトともいえるので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;実は、配列はオブジェクトの一種でもあります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトのプロパティアクセスの方法で&lt;br &#x2F;&gt;
値を取得することができますもんね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-object&#x2F;ca9cea4cdfdc1c2c7008eaa1712a8f3d-1024x683.jpeg&quot; alt=&quot;Macとマグカップの画像&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プログラミング言語によっては、&lt;br &#x2F;&gt;
上記のオブジェクトのようなデータ構造と、&lt;br &#x2F;&gt;
配列は全く別のものだったりするので、&lt;br &#x2F;&gt;
これもTypeScript、JavaScriptの大きな特徴ですね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;pei-lie-noxing&quot;&gt;配列の型&lt;&#x2F;h3&gt;
&lt;p&gt;さて、TypeScriptの特徴は型ですが、&lt;br &#x2F;&gt;
配列の型は、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;[]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;alice&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに、&lt;strong&gt;型名[]と記述します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;上記の場合、stringの要素を持つ配列とわかりますね。&lt;&#x2F;p&gt;
&lt;p&gt;もう一つの記法として、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #000000;background-color: #FFFFFF;&quot;&gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;text-decoration: underline;&quot;&gt;Array&lt;&#x2F;span&gt;&lt;span&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;alice&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というのも存在します。&lt;&#x2F;p&gt;
&lt;p&gt;こちらは組み込みのジェネリック型にあたります。&lt;br &#x2F;&gt;
(すなわち、stringというものを型引数として渡している感じですね)&lt;&#x2F;p&gt;
&lt;p&gt;どちらの記法が良いというわけではありませんが、&lt;br &#x2F;&gt;
最初の方が、スッキリ書けるので、&lt;br &#x2F;&gt;
私は前者の記法のほうが好きです。&lt;&#x2F;p&gt;
&lt;p&gt;ジェネリクスっぽく書きたい場合は、&lt;br &#x2F;&gt;
後者にすると良いと思います。&lt;&#x2F;p&gt;
&lt;p&gt;また、最初に定義したような、&lt;br &#x2F;&gt;
複数の型が混ざった配列の場合は、&lt;br &#x2F;&gt;
ユニオン型というものを使って、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; arr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;)[]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;alice&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 123&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに記述することもできます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ユニオン型とは、上記の | の部分ですね。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;stringまたはnumberという感じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;union&quot;&gt;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;union&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【TypeScript基礎】プリミティブ型、基本的な型の種類について</title>
        <published>2022-12-24T00:00:00+00:00</published>
        <updated>2023-09-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/ts-primitive/"/>
        <id>https://reisuta.com/ts-primitive/</id>
        
        <content type="html" xml:base="https://reisuta.com/ts-primitive/">&lt;p&gt;TypeScriptの特徴は何と言っても、&lt;br &#x2F;&gt;
型にありますが、そんな型の中でも、&lt;br &#x2F;&gt;
&lt;mark&gt;中心的な役割を占める、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;プリミティブ型について、詳しく解説します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;文字ではなく、動画で観たい方は、&lt;br &#x2F;&gt;
下記をご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;d2ae8xAqV0I&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;また、&lt;mark&gt;TypeScriptについては、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;一通りの基礎文法を一動画で解説した、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;総集編もありますので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
よろしければ、こちらもご参考ください。&lt;&#x2F;p&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;eAWj8JrU9v8&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;purimiteibuxing-tohahe-ka&quot;&gt;プリミティブ型とは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;プリミティブとは、原始的なという意味を表す英単語で、&lt;br &#x2F;&gt;
&lt;strong&gt;ここでは、最も基本的なデータ型を指します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;もっと、専門的に言うと、&lt;br &#x2F;&gt;
オブジェクトではなく、メソッドやプロパティを持たないデータ型のこと指すようですね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Glossary&#x2F;Primitive&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Glossary&#x2F;Primitive&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Data_structures#data_property&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Data_structures#data_property&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;オブジェクトは、プリミティブ以外のもので、&lt;br &#x2F;&gt;
代表的なコードとしては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;obj&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;, age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;jsの場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; obj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span&gt; { name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span&gt;, age&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {name:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;obj&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,age:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;tsの場合&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;本記事はプリミティブ型の解説を主軸とするので、&lt;br &#x2F;&gt;
オブジェクトには深入りしませんが、&lt;br &#x2F;&gt;
オブジェクトは、nameやageのようなプロパティを持っています。&lt;&#x2F;p&gt;
&lt;p&gt;プロパティとは、上記のname(キー),&#x27;obj&#x27;(value)を合わせたものを指しています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Working_with_Objects&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Guide&#x2F;Working_with_Objects&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;つまり、プリミティブ型は、&lt;br &#x2F;&gt;
平たく言うと、&lt;strong&gt;今まで使ってきた&#x27;hello&#x27;といった文字列や、&lt;br &#x2F;&gt;
100といった数字型のように、その値しかないものと言えそうですね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;変数とかに定義された際に、&lt;br &#x2F;&gt;
呼び出し方によって、値が変わる、&lt;br &#x2F;&gt;
つまり複数の値が予め備わっていないものと考えれば概ね問題ないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;さて、そんなプリミティブ型は、全部で7種類存在します。&lt;br &#x2F;&gt;
(本記事では、bitint型とシンボル型は、基礎からはやや外れるので割愛します。)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;numberxing&quot;&gt;number型&lt;&#x2F;h3&gt;
&lt;p&gt;これはその名の通り、&lt;br &#x2F;&gt;
数値を表す型ですね。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ただ、TypeScript独特の仕様として、&lt;br &#x2F;&gt;
&lt;strong&gt;number型には整数と小数の区別がありません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
下記では、整数しか定義していないが、&lt;br &#x2F;&gt;
計算結果は、小数になっています。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 8&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; ans&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; number&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (num1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; num2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; num3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(ans)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;19.5と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、好き嫌いも分かれる部分かと思いますが、&lt;br &#x2F;&gt;
静的型付け言語の型としては、ちょっと大雑把な印象があります。&lt;&#x2F;p&gt;
&lt;p&gt;以前、下記のようなツイートをしましたが、&lt;br &#x2F;&gt;
同じ静的型付け言語のC++とかとはかなり異なっていますね。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;xileng4&#x2F;status&#x2F;1700358597786652947&quot;&gt;X (Twitter) でポストを見る&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;それと、一般的に数値などは、&lt;br &#x2F;&gt;
integerとかintという記法が多いのですが、&lt;br &#x2F;&gt;
TypeScriptでは、numberとなっているので、&lt;br &#x2F;&gt;
このあたりも微妙に混乱しますね。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;stringxing&quot;&gt;string型&lt;&#x2F;h3&gt;
&lt;p&gt;こちらも、基本的な型で、&lt;br &#x2F;&gt;
&#x27;hello&#x27;のような文字列の型ですね。&lt;&#x2F;p&gt;
&lt;p&gt;文字列の作り方として、&lt;br &#x2F;&gt;
&quot;&quot;と&#x27;&#x27;で囲うやり方があり、&lt;br &#x2F;&gt;
基本的には大差ないかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;書き方としては、下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;文字列の話に関連すると、&lt;br &#x2F;&gt;
テンプレートリテラルという記法も存在するので、&lt;br &#x2F;&gt;
そちらにも言及します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;tenpuretoriteraru&quot;&gt;テンプレートリテラル&lt;&#x2F;h4&gt;
&lt;p&gt;これは、文字列の中に変数を入れることができるというメリットがある記法でして、&lt;br &#x2F;&gt;
``とバッククオートで囲んで記述します。&lt;&#x2F;p&gt;
&lt;p&gt;Rubyとかでの式展開に近いものでして、&lt;br &#x2F;&gt;
変数を埋め込みたい時に重宝します。&lt;&#x2F;p&gt;
&lt;p&gt;記法としては、下記のような感じです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; str1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello world&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; str2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;HELLO WORLD&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;str1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;${&lt;&#x2F;span&gt;&lt;span&gt;str2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;`&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F; &amp;quot;hello world, HELLO WORLD&amp;quot; と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;${str1}, str2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; &amp;quot;${str1}, str2&amp;quot;と表示される &lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #88846F;&quot;&gt;&#x2F;&#x2F;テンプレートリテラルでないと、変数名そのものが文字列になる。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このような変数名の埋め込みに関しては、&lt;br &#x2F;&gt;
+演算子でも似たようなことができるので、&lt;br &#x2F;&gt;
人によって、どちらの記法が良いかと好き嫌いが分かれることもあります。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、個人的には、このテンプレートリテラルのほうが、&lt;br &#x2F;&gt;
簡潔になるので、おすすめです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;booleanxing&quot;&gt;boolean型&lt;&#x2F;h3&gt;
&lt;p&gt;boolean型とは、真偽値のことで、&lt;br &#x2F;&gt;
trueまたはfalseの2種類だけの値からなる型のことです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; bool1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; boolean&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; bool2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; boolean&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;trueとかfalseという概念は、&lt;br &#x2F;&gt;
最初はピンとこないかもしれませんが、&lt;br &#x2F;&gt;
命題の真か偽かと考えてもらえるとわかりやすいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;プログラムでは、「こういう条件のときだけ、こういうことをしたい」みたいな場面が&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;たくさんあるのですが、まさに「こういう条件のとき」を表す際に、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;「こういう条件 が真」→ こういう条件 === 真(true)というふうに表現して、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;記述していきます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;boolean型は、こういうときに大活躍します。&lt;&#x2F;p&gt;
&lt;p&gt;以上のように、boolean型は条件分岐と交えて使用することがほとんで、&lt;br &#x2F;&gt;
trueのときと、falseのときで実行したい処理を分けたいif文などでよく使われます。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;zhen-wei-zhi-bian-huan-nojie-guo&quot;&gt;真偽値変換の結果&lt;&#x2F;h4&gt;
&lt;p&gt;実はわざわざtrueとかfalseと書かなくても、&lt;br &#x2F;&gt;
どんな値も真偽値に変換されれば、この二種類のどちらかとなります。&lt;&#x2F;p&gt;
&lt;p&gt;そして、どういう値が、trueになりfalseになりというのは、&lt;br &#x2F;&gt;
プログラミング言語ごとに異なるため、&lt;br &#x2F;&gt;
これは、プログラミング言語の個性とみなされることが多いです。&lt;&#x2F;p&gt;
&lt;p&gt;条件分岐では、&lt;br &#x2F;&gt;
値がそのまま入れられることも多いです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;) console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;0はfalseなので実行されない。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;) console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;1はtrueなので実行される。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;&amp;#39;hello&amp;#39;はtrueなので実行される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; (num1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; num2)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;num1の方がnum2未満なら実行され、そうでないと実行されない条件分岐&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、&lt;strong&gt;falseに判定されるものは、 false, &quot;&quot;(空文字列), 0, NaN, null, undefinedで、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;それ以外はすべてtrueと判定される。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;多くの言語は、0をfalseと判定していますが、&lt;br &#x2F;&gt;
例えばRubyとかは、0もtrueと判定しており、&lt;br &#x2F;&gt;
Rubyにおける、falseは、nilとfalseだけというシンプルさ。&lt;&#x2F;p&gt;
&lt;p&gt;プログラミング言語によって、かなり違いますね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、Rubyにも興味がある方は、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;all-object&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で紹介しているので、&lt;br &#x2F;&gt;
ご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;692&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nullxing-toundefinedxing&quot;&gt;null型とundefined型&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;null型は、その名のとおり、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;nullという値だけをもつ型です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プログラムでは値が存在しないというものを、&lt;br &#x2F;&gt;
このようなnullとかで表すことが多いのですが、&lt;br &#x2F;&gt;
バグの原因になったりするので、&lt;br &#x2F;&gt;
nullについては、慎重に扱う必要があります。&lt;br &#x2F;&gt;
(※TypeScriptの場合、null安全のような議論もあるので、&lt;br &#x2F;&gt;
一般的なnullに対するイメージとは必ずしも一致しないこともありますが、&lt;br &#x2F;&gt;
ここではややこしくなるので、そこには言及しません)&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、0とかとは何が違うのかというと、&lt;br &#x2F;&gt;
0は、number型で値が存在します。&lt;br &#x2F;&gt;
その証拠に、0 + 1 = 1というように、&lt;br &#x2F;&gt;
0に足したりできます。&lt;&#x2F;p&gt;
&lt;p&gt;これに対して、nullは、値が存在しないので、&lt;br &#x2F;&gt;
上記のようなことはできません。&lt;&#x2F;p&gt;
&lt;p&gt;イメージとしては、0は、0という存在があるけど、&lt;br &#x2F;&gt;
nullは存在自体がないことを表す概念という感じです。&lt;&#x2F;p&gt;
&lt;p&gt;ややこしいですね。&lt;br &#x2F;&gt;
最初のうちはピンとこないかもしれませんが、&lt;br &#x2F;&gt;
要するに、&lt;mark&gt;値が存在しないものと思っていただければ大丈夫です。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;undefined型も似たようなもので、&lt;br &#x2F;&gt;
undefinedという値だけを持つ型です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; null&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; num2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; undefined&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; undefined&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これらは、データがないということを表すものです。&lt;&#x2F;p&gt;
&lt;p&gt;他のRubyなどの言語では、&lt;br &#x2F;&gt;
こういったデータがないという型は、&lt;br &#x2F;&gt;
nilなどのように一種類のことが多いのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;TypeScriptでは、このように二種類存在します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、TypeScriptやJavaScriptの大きな特徴なのですが、&lt;br &#x2F;&gt;
一体どちらを使うべきなのかというと、&lt;br &#x2F;&gt;
個人的にはundefinedの方が良いのかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;undefinedは、オプショナルプロパティなどに出現するので、&lt;br &#x2F;&gt;
null型よりは、遭遇機会も多く、下手なバグに遭遇しにくい印象があります。&lt;br &#x2F;&gt;
(ただ、チームの方針によるので、もう正直どちらでも良いと思います。&lt;br &#x2F;&gt;
どちらが絶対にだめという類のものではないです。)&lt;&#x2F;p&gt;
&lt;p&gt;基本的に、こういった型は、自分で定義するものではなく、&lt;br &#x2F;&gt;
メソッドや関数などの返り値がデータがない、&lt;br &#x2F;&gt;
null型とかだった場合に、別の処理を記述するといったようにして、&lt;br &#x2F;&gt;
null型を減らすよう努める類のものです。&lt;&#x2F;p&gt;
&lt;p&gt;なので、この2つが出てきたら、&lt;br &#x2F;&gt;
データがないと捉えれば問題ないです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ratupaobuziekuto&quot;&gt;ラッパーオブジェクト&lt;&#x2F;h2&gt;
&lt;p&gt;プリミティブ型は、オブジェクトと違って、&lt;br &#x2F;&gt;
メソッドを持ちません。&lt;br &#x2F;&gt;
&lt;strong&gt;しかし、あたかもメソッドを持つかのように振る舞います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&quot;hello&quot;というのは、&lt;br &#x2F;&gt;
文字列でプリミティブ型なので、&lt;br &#x2F;&gt;
本来メソッドを持ちません。&lt;br &#x2F;&gt;
けれども、下記のようにincludesメソッドを実行できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;includes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;h&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;これは、&quot;hello&quot;という文字列のラッパ−オブジェクト,Stringに変換され、&lt;br &#x2F;&gt;
その&lt;strong&gt;ラッパーオブジェクト経由でメソッドが呼び出せれているので、&lt;br &#x2F;&gt;
あたかもオブジェクトのように振る舞っているということです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ラッパーオブジェクトとは、&lt;br &#x2F;&gt;
そのプリミティブ型の大本のクラスのインスタンスですね。&lt;br &#x2F;&gt;
型注釈に振る型と思っていただければ大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;).&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;includes&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;h&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;と同義です。&lt;&#x2F;p&gt;
&lt;p&gt;typeofを使うとわかるのですが、&lt;br &#x2F;&gt;
&quot;hello&quot;は文字列なのに対し、&lt;br &#x2F;&gt;
new String(&quot;hello&quot;)は&lt;br &#x2F;&gt;
オブジェクトになります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; str1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; = new&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; String&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; str2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;hello&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;typeof&lt;&#x2F;span&gt;&lt;span&gt; str1);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;typeof&lt;&#x2F;span&gt;&lt;span&gt; str2);&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; string&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;メソッドはオブジェクトでないと、呼び出せないのに、&lt;br &#x2F;&gt;
プリミティブ型からも呼び出せるように見えるのは、こういう仕掛けがあるからです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;String&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Global_Objects&#x2F;String&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、数値型は、Number、真偽値は、Booleanといった&lt;br &#x2F;&gt;
ラッパーオブジェクトがあります。&lt;&#x2F;p&gt;
&lt;p&gt;詳細は、下記に書かれてあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Data_structures&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Data_structures&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なぜ、長々とこんなことを説明したのかというと、&lt;br &#x2F;&gt;
冒頭でプリミティブ型は、プロパティやメソッドを持たないと言った意味が、&lt;br &#x2F;&gt;
上記のラッパーオブジェクトに関わっているからです。&lt;&#x2F;p&gt;
&lt;p&gt;プリミティブ型とは何かという定義に対し、&lt;br &#x2F;&gt;
ドキュメントもラッパーオブジェクトに言及して説明しています。&lt;&#x2F;p&gt;
&lt;p&gt;これで下記のドキュメントで言っている意味がわかるようになるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Glossary&#x2F;Primitive&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Glossary&#x2F;Primitive&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プリミティブ型は、nullとundefined以外、&lt;br &#x2F;&gt;
ラッパーオブジェクトを持っています。&lt;&#x2F;p&gt;
&lt;p&gt;それはすなわち、ラッパーオブジェクトがないと、&lt;br &#x2F;&gt;
メソッドなどを実行できないからです。&lt;&#x2F;p&gt;
&lt;p&gt;nullとundefinedには当てはまらないが、&lt;br &#x2F;&gt;
この2つはやや特殊なのでプリミティブ型とは何かという問いに対し、&lt;br &#x2F;&gt;
&lt;strong&gt;対応するラッパーオブジェクトを持ち、&lt;br &#x2F;&gt;
メソッドを実行する際、それに変換されるもの&lt;&#x2F;strong&gt;と考えた方が、&lt;br &#x2F;&gt;
わかりやすいかもしれないですね。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【TypeScriptの変数】let&#x2F;constと変数として使えないもの</title>
        <published>2022-12-24T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/ts-variable/"/>
        <id>https://reisuta.com/ts-variable/</id>
        
        <content type="html" xml:base="https://reisuta.com/ts-variable/">&lt;h2 id=&quot;ts-playground&quot;&gt;TS Playground&lt;&#x2F;h2&gt;
&lt;p&gt;TS Playgroundは、&lt;br &#x2F;&gt;
TypeScriptを試すことができるサンドバッグ的環境。&lt;&#x2F;p&gt;
&lt;p&gt;通常、プログラミング言語の学習などをする際は、&lt;br &#x2F;&gt;
自分のPCに実行環境を構築する必要があるのですが、&lt;br &#x2F;&gt;
この作業が割りと最初の関門だったりします。&lt;&#x2F;p&gt;
&lt;p&gt;なので、クラウド上で、手軽にTypeScriptを試すことができると、&lt;br &#x2F;&gt;
便利なわけですが、TS playgroundは、それに該当します。&lt;&#x2F;p&gt;
&lt;p&gt;こんな感じです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;ts-variable&#x2F;Screenshot-2023-09-12-at-10.43.07-1024x408.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;このようなplaygroundは、&lt;br &#x2F;&gt;
TypeScriptに限らず、様々な言語にあり、&lt;br &#x2F;&gt;
有名所でいうと、Rust Playgroundでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;静的型付け言語の場合、&lt;br &#x2F;&gt;
コンパイルという作業が必要になるのですが、&lt;br &#x2F;&gt;
たかが文法の学習にそのような実行環境を作るのは、&lt;br &#x2F;&gt;
面倒なときもあります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;TypeScriptも静的型付け言語なので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;TypeScriptの文法を試す際、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;playgroundを使うと手軽で便利かなと思うので、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;最初にご紹介します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;play&quot;&gt;https:&#x2F;&#x2F;www.typescriptlang.org&#x2F;play&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bian-shu-toha&quot;&gt;変数とは？&lt;&#x2F;h2&gt;
&lt;p&gt;変数とは、&lt;br &#x2F;&gt;
よく箱に例えられることが多いので、&lt;br &#x2F;&gt;
&lt;strong&gt;値などを格納することができる名付けの役割を果たします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、TypeScriptだと下記のように変数を定義するのですが、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; box&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;何かが入っている箱です&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;この場合、boxというの変数名で、&lt;br &#x2F;&gt;
箱のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;以降、このboxを呼び出すと、&lt;br &#x2F;&gt;
値が&#x27;何かが入っている箱です&#x27;に書き換えられて使用できるので、&lt;br &#x2F;&gt;
boxというのは、ある種の名付けのようになっているという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;さて、そもそも素朴な疑問としてなぜ箱が必要なのか思うかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;変数は確かに値が入っている箱ではありますが、&lt;br &#x2F;&gt;
そうした箱を使う理由は、先述のように&lt;br &#x2F;&gt;
&lt;strong&gt;値などに名前をつけたいからと考えれば大丈夫です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;例えば、&lt;br &#x2F;&gt;
ラーメン屋の売上が100000円で、&lt;br &#x2F;&gt;
曜日によって、&lt;br &#x2F;&gt;
ラーメン屋の売上から1000円引いたり、&lt;br &#x2F;&gt;
300円引いたりと、売上額に対して色々計算をする場合、&lt;br &#x2F;&gt;
変数を使わないと、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;100000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 300&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のように、パット見上の数字が何を表しているのかよくわかりません。&lt;&#x2F;p&gt;
&lt;p&gt;そこで変数を使って、&lt;br &#x2F;&gt;
それぞれをいわゆる箱に入れると、&lt;br &#x2F;&gt;
変数名に好きな名前をつけることができるので、&lt;br &#x2F;&gt;
(※変数名にできないものもあるがそれは後ほど解説します。)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; uriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(uriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 300&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(uriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうすれば、売上から何かを引いているということがわかります。&lt;&#x2F;p&gt;
&lt;p&gt;実際は、上記のような処理の際は関数を使うのがいいのですが、&lt;br &#x2F;&gt;
(関数も名前をつけられる)&lt;br &#x2F;&gt;
変数の名付けの特徴としては、上記のような感じです。&lt;&#x2F;p&gt;
&lt;p&gt;変数の利点はこれ以外にも色々ありますが、&lt;br &#x2F;&gt;
&lt;mark&gt;一旦、名付け機能が強力だからという印象で問題ありません。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ちなみにですが、変数の名付けは、とても奥が深く、&lt;br &#x2F;&gt;
難しいものです。&lt;&#x2F;p&gt;
&lt;p&gt;というのも、上記のコードで、&lt;br &#x2F;&gt;
uriageの変数名が下記に変わっていたとするとどうでしょう？&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; sio-ramen &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(sio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;ramen&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;l0g&lt;&#x2F;span&gt;&lt;span&gt;(sio&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;ramen&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;あれ、塩ラーメンって、1000000円もするの？&lt;br &#x2F;&gt;
どんだけ高級なんだよ！って感じですよね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、これはsio-ramenという名付けが悪くて、&lt;br &#x2F;&gt;
実際の処理は、uriageから引いている処理です。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、上記のコードだけ見たら、&lt;br &#x2F;&gt;
「塩ラーメンの値段から何か引いているんだな」と&lt;br &#x2F;&gt;
読み取れます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;つまり、変数名は、自由に命名ができるにも関わらず、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;そのままの意味で読み取られてしまうので、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;嘘の変数名など書いてしまうと、一気にコードが意味不明になります。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さすがに、上記のような命名はしないかもしれませんが、&lt;br &#x2F;&gt;
例えば、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; uriage1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; uriage2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(uriage1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 300&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(uriage1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt;10000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じだとどうでしょう？&lt;&#x2F;p&gt;
&lt;p&gt;uriage1とuriage2どう違うねん！って思いませんでした？&lt;&#x2F;p&gt;
&lt;p&gt;ただ、こういう命名は最初のうちは&lt;br &#x2F;&gt;
意外とやってしまいがちです。&lt;&#x2F;p&gt;
&lt;p&gt;「いや、自分はわかりますよ」って思うかもしれませんが、&lt;br &#x2F;&gt;
&lt;strong&gt;プログラム開発においては、それではだめで、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;他の人が読んでも誤解なく受け取ってもらえるかを&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;意識する必要があります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;コーディングの意図がわからない、他人が上記のコードを読んだら、&lt;br &#x2F;&gt;
uriage1とuriage2の違いはわかりませんし、&lt;br &#x2F;&gt;
なぜ、uriage1からしか引いていないのかもわかりません。&lt;&#x2F;p&gt;
&lt;p&gt;つまり、変数名にコーディングの意図を語らせる必要があるのですが、&lt;br &#x2F;&gt;
命名な自由なだけ、そのあたりは腕の見せどころになります。&lt;&#x2F;p&gt;
&lt;p&gt;変数の名付けが難しく、奥深い理由はこのような感じです。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;typescriptnobian-shu&quot;&gt;TypeScriptの変数&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;TypeScriptのベースは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;JavaScriptなので、型以外は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;基本的に変数宣言のやり方は同じです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;とはいっても、&lt;br &#x2F;&gt;
JavaScriptがあんま良く知らんっていう人も&lt;br &#x2F;&gt;
いるかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;その場合でも、&lt;mark&gt;いきなりTypeScriptから勉強しても&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;良いかと思います。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptは、TypeScriptで型を振らない状態のようなものなので、&lt;br &#x2F;&gt;
TypeScriptの基本文法を学んでおけば、&lt;br &#x2F;&gt;
JavaScriptも基本的な部分は十分でしょう。&lt;&#x2F;p&gt;
&lt;p&gt;さて、ではそんなTypeScriptの変数宣言ですが、&lt;br &#x2F;&gt;
型をつけないで、変数宣言をすることもできるので、&lt;br &#x2F;&gt;
下記のようにJavaScriptと同じ文法で変数定義もできます。&lt;&#x2F;p&gt;
&lt;p&gt;下記は、JavaScriptでもあり、TypeScriptでもあるコードです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(hello)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; &amp;#39;Hello&amp;#39;と表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちなみに、&lt;br &#x2F;&gt;
&lt;strong&gt;一行コメントは、&#x2F;&#x2F;で行い、 複数行コメントは、&#x2F;&lt;em&gt;…&lt;&#x2F;em&gt;&#x2F;で行います&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これをTypeScriptにすると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;というふうに型をつけることができます。&lt;&#x2F;p&gt;
&lt;p&gt;Helloは、文字列なので、&lt;br &#x2F;&gt;
stringを型として指定します。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、上記のような場合は、&lt;br &#x2F;&gt;
型推論がきくはずなので、&lt;br &#x2F;&gt;
stringの型注釈をする必要もないかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;type-inference&quot;&gt;https:&#x2F;&#x2F;typescriptbook.jp&#x2F;reference&#x2F;values-types-variables&#x2F;type-inference&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、型注釈はある種のドキュメント(コードの可読性を上げる)の役割も果たせるので、&lt;br &#x2F;&gt;
基本的には型を振っておいても損はないかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、下記のようにany型というのを振ることもできますが、&lt;br &#x2F;&gt;
これは、型注釈を無視して、TypeScriptの利点を放棄することに等しいので、&lt;br &#x2F;&gt;
実質的にはJavaScriptと同等です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; any&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;Hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の場合は、any型を振らなければ、&lt;br &#x2F;&gt;
型推論がきくのに、わざわざany型にしてそのメリットを放棄しているので、&lt;br &#x2F;&gt;
通常ならありえないコードですね。&lt;&#x2F;p&gt;
&lt;p&gt;any型は、JavaScriptからTypeScriptに移行するために&lt;br &#x2F;&gt;
暫定的に使うぐらいでしょうか。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、ESLintとかでも、&lt;br &#x2F;&gt;
any型があると警告が出たりします。&lt;&#x2F;p&gt;
&lt;p&gt;こういった型の詳細については、&lt;br &#x2F;&gt;
下記の記事もご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;23&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bian-shu-ming-tositetukaenaimono&quot;&gt;変数名としてつかえないもの&lt;&#x2F;h3&gt;
&lt;p&gt;さて、そんな変数ですが、&lt;br &#x2F;&gt;
何でも好きな名前をつければいいというわけでもありません。&lt;&#x2F;p&gt;
&lt;p&gt;まず&lt;strong&gt;予約語&lt;&#x2F;strong&gt;は変数名には使えません。&lt;br &#x2F;&gt;
予約語とは、ifやforなど、TypeScriptのなかで予め用意されているものです。&lt;&#x2F;p&gt;
&lt;p&gt;基本的には、JavaScriptの予約語と変わらないはずです。&lt;br &#x2F;&gt;
ここにJavaScriptの予約語が書かれています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Lexical_grammar&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;ja&#x2F;docs&#x2F;Web&#x2F;JavaScript&#x2F;Reference&#x2F;Lexical_grammar&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、変数の名付けは、基本的に他のプログラマーがわかるような変数にするため、&lt;br &#x2F;&gt;
正直予約語と衝突することはあまりありません。&lt;br &#x2F;&gt;
(予約語を変数名に使っている時点で変数名としては良く傾向があるので)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、例えば教育関連のシステムで、&lt;br &#x2F;&gt;
学校のクラスの変数名を使いたいときは、&lt;br &#x2F;&gt;
予約後で衝突するので、衝突したからと悪いともかぎりません。&lt;&#x2F;p&gt;
&lt;p&gt;こういう場合は、変数名を考えるのが大変ですが、&lt;br &#x2F;&gt;
別のものにする必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptの話ではありませんが、&lt;br &#x2F;&gt;
以前、Ruby on Railsを使用している際、&lt;br &#x2F;&gt;
テーブルのカラムにsequece(順番)というものが有りましたが、&lt;br &#x2F;&gt;
これがライブラリのFactory botのメソッドと衝突するということが有りました。&lt;&#x2F;p&gt;
&lt;p&gt;予約後の衝突というわけでもありませんが、&lt;br &#x2F;&gt;
衝突すると、エラーになってしまうので、&lt;br &#x2F;&gt;
避けましょう。&lt;&#x2F;p&gt;
&lt;p&gt;変数名の話に戻りますが、&lt;br &#x2F;&gt;
一応、日本語も変数名にすることは、&lt;br &#x2F;&gt;
可能っちゃ可能です。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;けれども、基本的に変数名に日本語を使用することは&lt;&#x2F;strong&gt;ありません。&lt;&#x2F;p&gt;
&lt;p&gt;そもそもコンピュータと日本語の相性はあまり良くなく、&lt;br &#x2F;&gt;
文字コード関連で余計なエラーを招く可能性があるので、&lt;br &#x2F;&gt;
日本語じゃなきゃだめという強い理由がないと変数名に採用するのは、&lt;br &#x2F;&gt;
避けるべきかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;数字に関しては、先頭以外であれば、&lt;br &#x2F;&gt;
変数名に含めても問題ありません。&lt;&#x2F;p&gt;
&lt;p&gt;記号系に関しては、基本的にNGだが、&lt;br &#x2F;&gt;
_とかは比較的よく使われます。&lt;&#x2F;p&gt;
&lt;p&gt;変数の命名規則に、&lt;br &#x2F;&gt;
&lt;strong&gt;パスカルケースや、ケバブケース、スネークケースなどありますが、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;_などは、スネークケースとかで用いられますね。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの場合、スネークケースが採用されるケースは&lt;br &#x2F;&gt;
殆どないと思いますが、Rubyとかだとスネークケースで記載することが&lt;br &#x2F;&gt;
増えてきます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;typescript-jp.gitbook.io&#x2F;deep-dive&#x2F;styleguide&quot;&gt;https:&#x2F;&#x2F;typescript-jp.gitbook.io&#x2F;deep-dive&#x2F;styleguide&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの変数名の良い例を紹介すると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; greeting&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; uriage1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 10000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; kyounoUriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;反対に変数名の悪い例を紹介すると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; あいさつ&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;エラーにはならない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; 1uriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1999&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;予約語を変数名にしている&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; kyouno uriage &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;変数名に空白が入っている&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; kyouno_uriage&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;エラーにはならないが、JavaScriptの変数でスネークケースはスタイルガイド的に良くない&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のような感じになるかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まあ、正直な話、&lt;br &#x2F;&gt;
バックエンドRuby、フロントエンドJavaScriptの構成とかだと、&lt;br &#x2F;&gt;
api側の変数の命名規則に併せて、フロント側でもスネークケースで受け取るみたいなことは、&lt;br &#x2F;&gt;
全然あるかなとも思いますので、スネークケースについては、&lt;br &#x2F;&gt;
一概に悪いとも断定できませんが。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bian-shu-nixing-woyu-eru&quot;&gt;変数に型を与える&lt;&#x2F;h3&gt;
&lt;p&gt;さて、上記までの話は、&lt;br &#x2F;&gt;
TypeScriptというより、&lt;br &#x2F;&gt;
JavaScript寄りの話でしたが、&lt;br &#x2F;&gt;
&lt;strong&gt;TypeScriptの特徴はなんといっても、型にあります。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;先程、ちらっと触れましたが、&lt;br &#x2F;&gt;
TypeScriptは変数に型注釈を加えて書きます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記の: stringの部分が型注釈です。&lt;&#x2F;p&gt;
&lt;p&gt;stringというのは、文字列のことで、&lt;br &#x2F;&gt;
変数greetに代入されているのは、&lt;br &#x2F;&gt;
&#x27;hello&#x27;という文字列です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、この場合は問題ないコードです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;const greet: stringと書いた時点で、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;greetという変数にはstring型しかいれることができないというのが、 上記のコードの意味で&lt;&#x2F;strong&gt;す。&lt;&#x2F;p&gt;
&lt;p&gt;試しにstring型以外を入れてみましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; 100&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;すると、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type &amp;#39;number&amp;#39; is not assignable to type &amp;#39;string&amp;#39;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;となります。&lt;&#x2F;p&gt;
&lt;p&gt;これは、100がnumber型なのに対し、&lt;br &#x2F;&gt;
greetという変数がstring型になっているので、&lt;br &#x2F;&gt;
型が一致しないよというコンパイルエラーです。&lt;&#x2F;p&gt;
&lt;p&gt;「エラーが出るんだったら、&lt;br &#x2F;&gt;
JavaScriptのほうがいいんじゃね？」&lt;br &#x2F;&gt;
って思うかもしれませんが、&lt;br &#x2F;&gt;
実はそうではないのです。&lt;&#x2F;p&gt;
&lt;p&gt;型があることによる恩恵は、偉大ということを解説します。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;xing-noen-hui&quot;&gt;型の恩恵&lt;&#x2F;h3&gt;
&lt;p&gt;先程変数は箱と言ったように、&lt;br &#x2F;&gt;
まさしく、変数は処理されたあとの値を待ち受ける箱のように使うことがあるでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;その際、JavaScriptだと、型を宣言することはできないので、&lt;br &#x2F;&gt;
箱は渡された値をそのまま入れるしかありません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;イメージとしては、毒を渡されても、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;それが毒ですとは教えてくれず、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;黙って箱の中にしまってしまうのが、 JavaScript&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;p&gt;おとなしい人が、嫌といえずに溜め込んでしまって、&lt;br &#x2F;&gt;
最後に爆発してしまうのに似ているかと思います。&lt;br &#x2F;&gt;
(この場合、爆発はJavaScriptの場合だと本番コードでの&lt;br &#x2F;&gt;
エラーでインシデントになることですかね。)&lt;&#x2F;p&gt;
&lt;p&gt;それに対して、TypeScriptは待ち受ける箱に予め型をつけることができるので、&lt;br &#x2F;&gt;
渡されてきた値が型と違っていれば、違うよというコンパイルエラーを出してくれます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;すなわち、毒を渡されても、 それが毒です、受け付けられませんとエラーを出してくれるのが、 TypeScript&lt;&#x2F;strong&gt;です。&lt;br &#x2F;&gt;
本番コードに上げる前に、まずい部分を指摘してくれるので、&lt;br &#x2F;&gt;
本番でのインシデントの軽減に一役かってくれているという感じです。&lt;&#x2F;p&gt;
&lt;p&gt;コンパイルエラーと言われると身構えてしまいますが、&lt;br &#x2F;&gt;
要は不適切な値を事前に弾いてくれているため、&lt;br &#x2F;&gt;
非常にありがたい代物と思っていただければ大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;JavaScriptとかだと、毒が全身に回って、死亡するまで&lt;br &#x2F;&gt;
(ソフトウェア的には、バグが複雑化して手がつけられなくなるまで)&lt;br &#x2F;&gt;
気づかない恐ろしさがあるともいえます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;まあ、何が言いたかったのかというと、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;とりあえず、コンパイルエラーは喜ぼうっていうことで&lt;&#x2F;strong&gt;す。&lt;&#x2F;p&gt;
&lt;p&gt;よく、「エラーが怖くなくなる本」みたいな書籍を&lt;br &#x2F;&gt;
見かけることがありますが、&lt;br &#x2F;&gt;
ああいう本の趣旨も、だいたいこのような感じなのかなと思っています。&lt;&#x2F;p&gt;
&lt;p&gt;エラーは親切に教えてくれているんですよ(笑)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lettoconst&quot;&gt;letとconst&lt;&#x2F;h3&gt;
&lt;p&gt;上記までの具体例では、&lt;br &#x2F;&gt;
変数宣言の際、基本的にconstを使用してきました。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;これに加えて、letというものもあります。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(varというのもありますが、非推奨なので紹介しません。&lt;br &#x2F;&gt;
昔のレガシーコードでは遭遇することもあるかもしれませんが、&lt;br &#x2F;&gt;
基本的に使うべきではありません。)&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;書き方は、constの部分をletに置き換えるだけです。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;letとconstの違いは再代入可能かどうか&lt;&#x2F;strong&gt;です。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;namasute&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;Cannot assign to &amp;#39;hello&amp;#39; because it is a constant.というエラーにな&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;namasute&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F;エラーなし&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(greet)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #88846F;&quot;&gt; &#x2F;&#x2F; namasuteと表示される&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;再代入できるletの方が柔軟で良さげと思うかもしれませんが、 可能な限りletを使うのは避けるべきです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なぜなら、再代入可能ということは、&lt;br &#x2F;&gt;
最初に宣言された値とは変わる可能性があるからです。&lt;&#x2F;p&gt;
&lt;p&gt;先程の、TypeScriptとJavaScriptの話に似ていますね(笑)&lt;&#x2F;p&gt;
&lt;p&gt;つまり、letで宣言された変数の場合、&lt;br &#x2F;&gt;
いま現時点でletの変数になんの値が入っているのか正しい状態なのかを&lt;br &#x2F;&gt;
判断しなければなりません。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello1&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;let&lt;&#x2F;span&gt;&lt;span&gt; greet1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello1&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;#39;hello&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; greet1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;  +&lt;&#x2F;span&gt;&lt;span&gt; greet1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; greet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(greet)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;実際には、こんなコードは嫌がらせのとき以外は書かないが、&lt;br &#x2F;&gt;
文法上は、こういうコードも許してしまうということになります。&lt;&#x2F;p&gt;
&lt;p&gt;console.logで何が出力されるのか、&lt;br &#x2F;&gt;
いちいち処理を追って行かないとよくわかりません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;mark&gt;&lt;strong&gt;つまり、letの使用は読み手に負担を与える可能性があるというこ&lt;&#x2F;strong&gt;とです。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そのため、ifやforなどの複雑なロジックで、&lt;br &#x2F;&gt;
やむをえずletを使うしかない場面以外は基本はletを使わないようにするべきかなと思います。&lt;&#x2F;p&gt;
&lt;p&gt;入門書とかのサンプルコードを見ると、&lt;br &#x2F;&gt;
letのほうが使用頻度が多いので、&lt;br &#x2F;&gt;
letを使っておけばいいだろうみたいない思う方もいるかもしれませんが、&lt;br &#x2F;&gt;
上記の理由で、基本はconstです。&lt;&#x2F;p&gt;
&lt;p&gt;letで書いてしまったら、なんとかしてconstに書き換えできないか、&lt;br &#x2F;&gt;
コードを見直すサインともいえるかもしれないですね。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>【TypeScript環境構築手順】nvm経由でのNode.jsインストール</title>
        <published>2022-12-23T00:00:00+00:00</published>
        <updated>2023-09-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/typescript-build/"/>
        <id>https://reisuta.com/typescript-build/</id>
        
        <content type="html" xml:base="https://reisuta.com/typescript-build/">&lt;p&gt;TypeScriptの実行環境を作るには、&lt;br &#x2F;&gt;
Node.jsを入れる必要がありますが、&lt;br &#x2F;&gt;
意外とNode.jsを入れたりするのは、&lt;br &#x2F;&gt;
面倒だったりします。&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;mark&gt;本記事では、&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;Node.jsのインストールからTypeScriptの&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;実行ができるまでを目指して、解説します。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;node-jsinsutoru&quot;&gt;Node.jsインストール&lt;&#x2F;h2&gt;
&lt;p&gt;公式サイト(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nodejs.org&quot;&gt;https:&#x2F;&#x2F;nodejs.org&lt;&#x2F;a&gt;) で推奨版を&lt;br &#x2F;&gt;
ダウンロードするやり方もありますが、&lt;br &#x2F;&gt;
Node.jsはバージョンを切り替えることが割とあるので、&lt;br &#x2F;&gt;
最初からバージョンマネージャーを入れてしまったほうが早いかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;個人的な印象ですが、Node.jsは&lt;br &#x2F;&gt;
バージョンによるエラーが出たり出なかったりということが&lt;br &#x2F;&gt;
割りと多い印象があり、スピーディにバージョンを切り替えられるかどうかは、&lt;br &#x2F;&gt;
開発体験にも影響するでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;Node.jsバージョンマネージャーは色々ありますが、&lt;br &#x2F;&gt;
ここでは、nvmを使います。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nvm&quot;&gt;nvm&lt;&#x2F;h3&gt;
&lt;p&gt;公式サイト(&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvm-sh&#x2F;nvm&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;nvm-sh&#x2F;nvm&lt;&#x2F;a&gt;) を見ると、&lt;br &#x2F;&gt;
下記のコマンドでインストールできるようです。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -o-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;nvm-sh&#x2F;nvm&#x2F;v0.39.2&#x2F;install.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;執筆時点のコマンドなので、&lt;br &#x2F;&gt;
うまく行かない場合は、公式の方のコマンドも試してみてください。&lt;&#x2F;p&gt;
&lt;p&gt;インストールしただけだとPATHが通っていないので、&lt;br &#x2F;&gt;
PATHも公式に従って通してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; NVM_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&amp;quot;$([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -z&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;${&lt;&#x2F;span&gt;&lt;span&gt;XDG_CONFIG_HOME-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;}&amp;quot; ] &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %s &amp;quot;${&lt;&#x2F;span&gt;&lt;span&gt;HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;}&#x2F;.nvm&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; ||&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;&quot;&gt; printf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; %s &amp;quot;${&lt;&#x2F;span&gt;&lt;span&gt;XDG_CONFIG_HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;}&#x2F;nvm&amp;quot;)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; -s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$NVM_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;nvm.sh&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ] &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt; \.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$NVM_DIR&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;&#x2F;nvm.sh&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちゃんとインストールされたか確認する場合は、&lt;br &#x2F;&gt;
下記のコマンドを打ちます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;インストールされたversionが返ってくれば問題ありません。&lt;&#x2F;p&gt;
&lt;p&gt;早速、nvm経由でNode.jsをインストールしたいので、&lt;br &#x2F;&gt;
&lt;strong&gt;まずはインストール可能なversionの一覧を見てみたいと思います。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;下記コマンドで確認できます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls-remote&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;typescript-build&#x2F;2dfce4d5-9c65-c936-7d86-ec428d990820.png&quot; alt=&quot;Screenshot 2022-12-03 at 18.19.37.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;たくさん出てきますね。&lt;&#x2F;p&gt;
&lt;p&gt;LTSと横に書いているやつは、&lt;br &#x2F;&gt;
Long Term Supportの略なので、&lt;br &#x2F;&gt;
メンテンスがしっかりしているかと思います。&lt;&#x2F;p&gt;
&lt;p&gt;なので、&lt;mark&gt;基本的にはこのLTS系を&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
&lt;mark&gt;インストールすることが望ましいです。&lt;&#x2F;mark&gt;&lt;br &#x2F;&gt;
(あえて不安定なversionでバグを見つけたりして、&lt;br &#x2F;&gt;
遊びたい人を除く)&lt;&#x2F;p&gt;
&lt;p&gt;とりあえず、LTSで一番最新の&lt;br &#x2F;&gt;
v18.12.1をインストールしてみます。&lt;&#x2F;p&gt;
&lt;p&gt;あるバージョンのnode.jsをインストールする場合は、&lt;br &#x2F;&gt;
下記のようなフォーマットでコマンドを実行します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install v18.12.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ちゃんとインストールできたか確認します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;typescript-build&#x2F;d360c2ed-7fbb-8f2c-8f6a-d5626d582329.png&quot; alt=&quot;Screenshot 2022-12-03 at 18.24.27.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こんなふうに、&lt;br &#x2F;&gt;
システムの上らへんに、&lt;br &#x2F;&gt;
今インストールしたversionが出ていれば、&lt;br &#x2F;&gt;
インストールされている。&lt;&#x2F;p&gt;
&lt;p&gt;上記の図だと、v18.12.1と表示されていますね。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、-&amp;gt;で指しているところが、&lt;br &#x2F;&gt;
現在のNode.jsのversionになります。&lt;&#x2F;p&gt;
&lt;p&gt;最後にNode.jsのバージョン確認で、&lt;br &#x2F;&gt;
定番の下記コマンドを実行してみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;node&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記を実行すると、同じversionになっているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;以上で、Node.jsをインストールすることができました。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、nvmの強みは、&lt;br &#x2F;&gt;
様々なバージョンを管理できることにあるので、&lt;br &#x2F;&gt;
他のバージョンに切り替えられなきゃ意味はありません。&lt;&#x2F;p&gt;
&lt;p&gt;使うversionを切り替えたいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; use v18.12.1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;nvm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; use system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;のようにuseを使えば切り替えることができます。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;typescripthuan-jing-gou-zhu&quot;&gt;TypeScript環境構築&lt;&#x2F;h2&gt;
&lt;p&gt;Node.jsの導入ができたので、&lt;br &#x2F;&gt;
次にTypeScriptの環境構築をしようと思います。&lt;&#x2F;p&gt;
&lt;p&gt;まずは、package.jsonを作ります。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; init&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -yes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;上記は、package.jsonを作成してくれるコマンドです。&lt;&#x2F;p&gt;
&lt;p&gt;作成したら早速、&lt;br &#x2F;&gt;
TypeScriptをインストールしてみます。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --save-dev&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; typescript @types&#x2F;node&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;※なぜかはわからないが、コピペしたやつをそのまま実行しても上手く行かないときがあるので、&lt;br &#x2F;&gt;
その際は、直打ちして試してください。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptがインストールできたら、&lt;br &#x2F;&gt;
コンパイラに関する設定ファイルである、&lt;br &#x2F;&gt;
tsconfig.jsonを作成します。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tsc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; -init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;tsconfig.jsonの設定の詳細はさておき、&lt;br &#x2F;&gt;
一旦これでもうTypeScriptを動かすことはできます。&lt;&#x2F;p&gt;
&lt;p&gt;適当なTypeScriptのファイルを作ってみます。&lt;&#x2F;p&gt;
&lt;p&gt;TypeScriptの詳細な文法については、&lt;br &#x2F;&gt;
下記のような記事もご参考ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;21&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;typescript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt;const&lt;&#x2F;span&gt;&lt;span&gt; hello&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #66D9EF;font-style: italic;&quot;&gt; string&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; &amp;quot;Hello World&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;console.&lt;&#x2F;span&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;log&lt;&#x2F;span&gt;&lt;span&gt;(hello)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;このファイルをコンパイルします。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; tsc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;index.jsというファイルがあれば、&lt;br &#x2F;&gt;
それがコンパイルされたファイルになるので、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;node&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; index.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;とすれば、Hello Worldと表示されるはずです。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、いきなりtsファイルを実行するには、&lt;br &#x2F;&gt;
ts-nodeを使います。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #AE81FF;&quot;&gt; --save&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; ts-node&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;インストールできたら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&#x2F;node_modules&#x2F;.bin&#x2F;ts-node index.ts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でHello Worldと表示されます。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="ja">
        <title>ターミナルインストールから始めるVim&#x2F;Neovim8つの基本キーバインド</title>
        <published>2022-12-23T00:00:00+00:00</published>
        <updated>2023-12-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://reisuta.com/vim-basic/"/>
        <id>https://reisuta.com/vim-basic/</id>
        
        <content type="html" xml:base="https://reisuta.com/vim-basic/">&lt;p&gt;本記事では、0からVimやNeovimについて、&lt;br &#x2F;&gt;
解説していきます。&lt;&#x2F;p&gt;
&lt;p&gt;Vimって何？っていう人や、&lt;br &#x2F;&gt;
ターミナルもほとんど使っていないという人でも、&lt;br &#x2F;&gt;
最低限これだけは知っておきたいVimのキーバインドを本記事でマスターできます。&lt;&#x2F;p&gt;
&lt;p&gt;具体的な対象読者としては、&lt;&#x2F;p&gt;
&lt;p&gt;対象読者&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Vimって何？っていう人&lt;&#x2F;li&gt;
&lt;li&gt;Vimを使えるようになりたいけどどこから手をつけていいかわからない人&lt;&#x2F;li&gt;
&lt;li&gt;とりあえず、Vimの基本だけおさえたい人&lt;&#x2F;li&gt;
&lt;li&gt;普段Vimを使用することがあまりない人&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;以上のように、初心者向けです。&lt;&#x2F;p&gt;
&lt;p&gt;Vimを普段から使っている人や、&lt;br &#x2F;&gt;
Pluginをゴリゴリ入れているような人には、&lt;br &#x2F;&gt;
参考になりません。&lt;&#x2F;p&gt;
&lt;p&gt;プラグインのゴリゴリ設定や、&lt;br &#x2F;&gt;
マニアックなキーバインドや、&lt;br &#x2F;&gt;
マクロのようなVimの応用的な機能とかは、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;recording&#x2F;&quot;&gt;こちらの記事&lt;&#x2F;a&gt;で紹介しています。&lt;&#x2F;p&gt;
&lt;p&gt;やや中級者向けの記事として、&lt;br &#x2F;&gt;
&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;register&#x2F;&quot;&gt;レジスタについての完全解説の記事&lt;&#x2F;a&gt;がありますので、&lt;br &#x2F;&gt;
Vimをある程度使っている方は、こちらのような記事を見ていただけると嬉しいです。&lt;&#x2F;p&gt;
&lt;p&gt;また、&lt;strong&gt;Vim&#x2F;Neovim超入門シリーズについては、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;下記のようにYoutubeでも動画として公開しています。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;実際にどのように操作しているのか動画で確認したい人は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;こちらも御覧ください。&lt;&#x2F;strong&gt;

&lt;div class=&quot;embed-yt&quot;&gt;
  &lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;_0gXG49cSkc&quot; title=&quot;YouTube video&quot;
    loading=&quot;lazy&quot; frameborder=&quot;0&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot;
    allowfullscreen&gt;&lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;

&lt;strong&gt;それでは、本記事でこれだけは覚えておきたい、 Vimのキーバインドを紹介します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vimtohahe-ka&quot;&gt;Vimとは何か？&lt;&#x2F;h2&gt;
&lt;p&gt;Vimとは、UNIX系OSで搭載されていることが多い、&lt;br &#x2F;&gt;
&lt;strong&gt;viエディタを改良した(Vi IMprovedでVim)&lt;br &#x2F;&gt;
テキストエディタです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;04d25895-db0b-60df-d62a-ce76eecb4f24.png&quot; alt=&quot;Screenshot 2022-12-16 at 7.52.55.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;プログラミングをするには、コードを書かないと行かないので、&lt;br &#x2F;&gt;
エディタが必須なのですが、Vimはそうしたエディタの一種です。&lt;&#x2F;p&gt;
&lt;p&gt;他のエディター代表例としては、VScode,nano,Emacsなど、色々なエディタがあります。&lt;&#x2F;p&gt;
&lt;p&gt;その中でも、&lt;mark&gt;&lt;strong&gt;VimはほとんどのLinux環境にインストールされている、&lt;br &#x2F;&gt;
汎用性の高さと、一度身につけてしまうと、他のエディタには戻れないぐらいの、&lt;br &#x2F;&gt;
圧倒的な使いやすさが魅力のため、人気のエディタの一種です。&lt;&#x2F;strong&gt;&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、メインエディタとして使わなくとも、&lt;br &#x2F;&gt;
サーバの中に入ってログインして作業することや、&lt;br &#x2F;&gt;
エンジニアなら多かれ少なかれあると思うので、&lt;br &#x2F;&gt;
&lt;strong&gt;Vimが最低限使用できないと困る場面も多いです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;また、人によってはVimをある程度使えるということを&lt;br &#x2F;&gt;
エンジニアの嗜みと捉えているひともいます。&lt;&#x2F;p&gt;
&lt;p&gt;プロのエンジニアとして従事している以上、&lt;br &#x2F;&gt;
Vimが全く使えないというのは、正直ちょっと恥ずかしいかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、基礎を習得することは、&lt;br &#x2F;&gt;
もはやエンジニアの必須教養といってもいいでしょう。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vimnoxue-xi-kosuto&quot;&gt;Vimの学習コスト&lt;&#x2F;h3&gt;
&lt;p&gt;とは言いつつも、&lt;br &#x2F;&gt;
Vimはエディターの中では、&lt;br &#x2F;&gt;
比較的学習コストが高いことで有名です。&lt;br &#x2F;&gt;
(似たようなエディターとしては、Emacsで、&lt;br &#x2F;&gt;
頻繁にVim vs Emacsの宗教戦争が起きている)&lt;&#x2F;p&gt;
&lt;p&gt;Vimの学習コストの高さから、&lt;br &#x2F;&gt;
Vimをメインエディタとして使用している人はまだまだ少ない印象ですが、&lt;br &#x2F;&gt;
&lt;mark&gt;Vimは一度身につけてしまえば、ずっと便利に使えます。&lt;&#x2F;mark&gt;&lt;&#x2F;p&gt;
&lt;p&gt;なので、学習コストの高さで、&lt;br &#x2F;&gt;
毛嫌いしてしまうのは、個人的にはとてももったいないと思います。&lt;&#x2F;p&gt;
&lt;p&gt;本記事や私のYoutube動画でも、&lt;br &#x2F;&gt;
できるだけわかりやすくVimについて、&lt;br &#x2F;&gt;
解説しているので、ぜひとも参考にしてください。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、最近では、Vimに関連するものとして、&lt;br &#x2F;&gt;
Neovimというものもあります。&lt;&#x2F;p&gt;
&lt;p&gt;こちらの方が、よりリッチで、わずかに起動速度が速いなどという&lt;br &#x2F;&gt;
メリットもあるので、こちらも強くおすすめできます。&lt;&#x2F;p&gt;
&lt;p&gt;ちなみに、私もメインではNeovimを使っています。&lt;&#x2F;p&gt;
&lt;p&gt;細かいVimとNeovimの違いについては、&lt;br &#x2F;&gt;
下記の記事を参考にしてください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;172&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;taminarunoinsutoru&quot;&gt;ターミナルのインストール&lt;&#x2F;h2&gt;
&lt;p&gt;それでは、早速本題に入りましょう。&lt;&#x2F;p&gt;
&lt;p&gt;すでにお気に入りのターミナルがある人は&lt;br &#x2F;&gt;
飛ばして頂いて大丈夫です。&lt;&#x2F;p&gt;
&lt;p&gt;デフォルトのターミナルをなんとなく使っていた方は、&lt;br &#x2F;&gt;
ぜひとも参考にしてくださると役に立つかもしれません。&lt;&#x2F;p&gt;
&lt;p&gt;「ターミナルとVimってなんの関係があるの？」って&lt;br &#x2F;&gt;
思われた方もいるかもしれませんが、&lt;&#x2F;p&gt;
&lt;p&gt;ターミナルは、Vimを使う際の土台となるため、&lt;br &#x2F;&gt;
かなりこだわってほしい部分ではあります。&lt;&#x2F;p&gt;
&lt;p&gt;なので、個人的には自分の好きなターミナルを使うのが最もいいのですが、&lt;br &#x2F;&gt;
ここでは無難なターミナルをいくつか紹介しておきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;macnochang-he&quot;&gt;Macの場合&lt;&#x2F;h3&gt;
&lt;p&gt;Macなら、&lt;br &#x2F;&gt;
iTerm2を使えば解決です。&lt;&#x2F;p&gt;
&lt;p&gt;何だかんだ言って、&lt;br &#x2F;&gt;
&lt;strong&gt;iTerm2を超えるターミナルは、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;少なくとも私観点では存在しません。&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
(パフォーマンスなどの部類では、&lt;br &#x2F;&gt;
alacrittyなどのRust製のターミナルのほうがいいかもしれません)&lt;&#x2F;p&gt;
&lt;p&gt;色々なターミナルを試しましたが、&lt;br &#x2F;&gt;
やはり王道は強いですね。&lt;&#x2F;p&gt;
&lt;p&gt;下記では、iTerm2しか紹介してませんが、&lt;br &#x2F;&gt;
Macなら、Linuxでおすすめしたようなターミナルも使用できるので、&lt;br &#x2F;&gt;
iTerm2が嫌ならそちらでも全然ありです。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;iterm2&quot;&gt;&lt;strong&gt;iTerm2&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;iterm2.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;iterm2.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;iTerm2のデメリットは、&lt;br &#x2F;&gt;
&lt;strong&gt;Macでしか使えないことです。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これ本当になんとかならないんですかね...&lt;&#x2F;p&gt;
&lt;p&gt;それと、デメリットというより、&lt;br &#x2F;&gt;
懸念点ですが、技術スタックが、&lt;br &#x2F;&gt;
Objective-Cと、レガシーなので、&lt;br &#x2F;&gt;
パフォーマンスは、そこまで良いわけではないのと、&lt;br &#x2F;&gt;
今後のメンテナンスなどがやや心配なのは否めません。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gnachman&#x2F;iTerm2&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;gnachman&#x2F;iTerm2&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;iTerm3に進化する際に、&lt;br &#x2F;&gt;
alacrittyみたいにRust製に進化したら、&lt;br &#x2F;&gt;
非の打ち所がないターミナルになるでしょう。&lt;br &#x2F;&gt;
(baseがObjective-C なので難しいでしょうが。現実的な路線でSwiftリプレイスでしょうか。)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;windowsnochang-he&quot;&gt;Windowsの場合&lt;&#x2F;h3&gt;
&lt;p&gt;私は普段、あまりWindowsは使わないので、&lt;br &#x2F;&gt;
正直私のほうが、おすすめターミナルを教えてもらいたいぐらいです。（泣）&lt;&#x2F;p&gt;
&lt;p&gt;一応、使っていた時期に、インストールして、&lt;br &#x2F;&gt;
割と良かったターミナルをご紹介します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;cmder&quot;&gt;&lt;strong&gt;cmder&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cmder.app&#x2F;&quot;&gt;https:&#x2F;&#x2F;cmder.app&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらが一番iTerm2の操作感に近かったです。&lt;&#x2F;p&gt;
&lt;p&gt;iTerm2の強みである、Hotkey設定も、&lt;br &#x2F;&gt;
cmderは対応しています。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、cmderは、ややカクツキが気になったりしたので、&lt;br &#x2F;&gt;
そのあたりは、個人的には惜しいなという印象です。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;cygwin&quot;&gt;&lt;strong&gt;cygwin&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cygwin.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;www.cygwin.com&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;WindowsとVimの相性はあまり良くなく、&lt;br &#x2F;&gt;
レジスタやクリップボード関係で結構苦労した記憶があります。&lt;br &#x2F;&gt;
Vimの記事を書いておいてあれですが、&lt;br &#x2F;&gt;
WindowsならベストエディタはやはりVScodeのような気がしています。&lt;br &#x2F;&gt;
(あくまで個人の感想です。)&lt;&#x2F;p&gt;
&lt;p&gt;それでも、Vimの基本を学ぶことは必須だとは思いますが。&lt;&#x2F;p&gt;
&lt;p&gt;そんな中、cygwinは、一番サクサク動いたターミナルという印象でした。&lt;br &#x2F;&gt;
Hotkeyのような設定はできませんが、普段使うターミナルとしては、&lt;br &#x2F;&gt;
一番安心して使えたかなと思います。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;windowstaminaru&quot;&gt;windowsターミナル&lt;&#x2F;h4&gt;
&lt;p&gt;今だったら、これが一番オススメです。&lt;br &#x2F;&gt;
なんと、デフォルトでインストールされています(Windowsすげえ)&lt;&#x2F;p&gt;
&lt;p&gt;ただ、細かい部分がiTerm2には追いついていない印象で、&lt;br &#x2F;&gt;
Hotkey設定もできるにはできるのですが、&lt;br &#x2F;&gt;
「いやそうじゃないんだよな」というふうに呼び出されたり、&lt;br &#x2F;&gt;
中途半端に画面にでてきたりするので、個人的には、&lt;br &#x2F;&gt;
惜しいという印象です。パフォーマンスは普通といったところでしょうか。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;linuxnochang-he&quot;&gt;Linuxの場合&lt;&#x2F;h3&gt;
&lt;p&gt;LinuxはiTerm2が使えないこと以外は、&lt;br &#x2F;&gt;
特に問題がなく、結構幅広いターミナルが使える印象です。&lt;&#x2F;p&gt;
&lt;p&gt;なので、一番ベストターミナルを模索しやすいOSな気がします。&lt;&#x2F;p&gt;
&lt;p&gt;もちろん、VimとLinuxの相性は抜群なので、&lt;br &#x2F;&gt;
その点でも問題はないでしょう。&lt;&#x2F;p&gt;
&lt;p&gt;正直Linuxを普段使いしている人は、&lt;br &#x2F;&gt;
自分のお気に入りターミナルを見つけていると思いますが、&lt;br &#x2F;&gt;
念のため紹介します。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;kitty&quot;&gt;&lt;strong&gt;kitty&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;sw.kovidgoyal.net&#x2F;kitty&#x2F;binary&#x2F;&quot;&gt;https:&#x2F;&#x2F;sw.kovidgoyal.net&#x2F;kitty&#x2F;binary&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;こちらは、Macでも使えます。&lt;br &#x2F;&gt;
総合的に優秀です。&lt;br &#x2F;&gt;
設定ファイルもカスタマイズしやすくなっています。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、Hotkey設定ができないのが残念。&lt;br &#x2F;&gt;
あと、もしWindowsに対応していたら、&lt;br &#x2F;&gt;
Windowsではこれを使っていた。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;alacritty&quot;&gt;&lt;strong&gt;alacritty&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;alacritty.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;alacritty.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;既に言及しましたが、&lt;br &#x2F;&gt;
件のRust製のパフォーマンス重視のターミナルです。&lt;&#x2F;p&gt;
&lt;p&gt;日本語のインライン入力ができないとの報告があったので、&lt;br &#x2F;&gt;
（現在は解消されている？)少々癖はありそうです。&lt;&#x2F;p&gt;
&lt;p&gt;設定ファイルもkittyのようにできますが、&lt;br &#x2F;&gt;
総じて、やや玄人向けですかね。&lt;&#x2F;p&gt;
&lt;p&gt;iTerm2とかじゃ物たんねーよっていう人向けですね。&lt;&#x2F;p&gt;
&lt;h4 id=&quot;terminator&quot;&gt;&lt;strong&gt;terminator&lt;&#x2F;strong&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gnome-terminator.org&#x2F;&quot;&gt;https:&#x2F;&#x2F;gnome-terminator.org&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;これは、Linuxだと結構無難なターミナルですね。&lt;br &#x2F;&gt;
Hotkey設定もできます。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、ややカクツキが気になるので、&lt;br &#x2F;&gt;
メインターミナルにするにはやや不安という感じですね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、有名なターミナルではあります。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vim-neovimnoinsutoru&quot;&gt;Vim&#x2F;Neovimのインストール&lt;&#x2F;h2&gt;
&lt;p&gt;さて、ターミナルがインストールできたら、&lt;br &#x2F;&gt;
早速ターミナルを開いて、&lt;br &#x2F;&gt;
vimをインストールしましょう。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; apt update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; apt install vim&lt;&#x2F;span&gt;&lt;span&gt; (or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; neovim&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;windowsのwslとLinuxのdebian系なら&lt;br &#x2F;&gt;
このコマンドでインストールできます。&lt;&#x2F;p&gt;
&lt;p&gt;Macなら、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; install vim&lt;&#x2F;span&gt;&lt;span&gt; (or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; neovim&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でインストールできます。(Homebrewのインストールが必要です)&lt;&#x2F;p&gt;
&lt;p&gt;macとかLinuxの場合、最初からvimがインストールされていることが&lt;br &#x2F;&gt;
ほとんどだとは思いますが、念のため。&lt;&#x2F;p&gt;
&lt;p&gt;起動方法としては、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span&gt; (or&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; nvim&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;でvimが起動すれば&lt;br &#x2F;&gt;
正常にインストールされています。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;7e52f5cc-df45-feb1-0cc0-6439e7c7bcec.png&quot; alt=&quot;Screenshot 2022-12-16 at 7.52.55.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;さっきも触れましたが、改めてVimとNeovimって何が違うねん！って&lt;br &#x2F;&gt;
思った人は、下記の記事で解説しているので、こちらを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;172&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vim-neovimnocao-zuo-fang-fa&quot;&gt;Vim&#x2F;Neovimの操作方法&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;iki-insato&quot;&gt;iキー(インサート)&lt;&#x2F;h3&gt;
&lt;p&gt;さて、上記のようにvimが開いたら、&lt;br &#x2F;&gt;
iキーを押してみましょう。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;9ba9cc1a-400c-1da8-8401-508bbf6f36b7.png&quot; alt=&quot;Screenshot 2022-12-16 at 8.23.15.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;左下に、INSERTという文字が表示されているはずです。&lt;&#x2F;p&gt;
&lt;p&gt;これはiキーを押すことで&lt;br &#x2F;&gt;
INSERTモードになったからです。&lt;&#x2F;p&gt;
&lt;p&gt;Vimにはいくつかのモードがあるのですが、&lt;br &#x2F;&gt;
&lt;strong&gt;最初は、このINSERTモードとノーマルモードさえ覚えておけば大丈夫です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Vimを起動した時点では、&lt;br &#x2F;&gt;
ノーマルモードになっています。&lt;&#x2F;p&gt;
&lt;p&gt;INSERTモードになって、&lt;br &#x2F;&gt;
キーボードを色々入力すると、&lt;br &#x2F;&gt;
普通のエディタのように文字を入力することができます。&lt;br &#x2F;&gt;
(その名の通りINSERT(挿入)モードですね。)&lt;&#x2F;p&gt;
&lt;p&gt;実はiキー以外にもINSERTモードに入ることができるキーはあるのですが、&lt;br &#x2F;&gt;
覚えることが増えるので、まずはiキーでINSERTモードに入ると&lt;br &#x2F;&gt;
覚えておけば大丈夫です。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;w-wq-q-q-ki-bao-cun-tozhong-liao&quot;&gt;w&#x2F;wq!&#x2F;q&#x2F;q!キー(保存と終了)&lt;&#x2F;h3&gt;
&lt;p&gt;さて、INSERTモードで編集が終わったら、&lt;br &#x2F;&gt;
保存をしたいですよね。&lt;&#x2F;p&gt;
&lt;p&gt;ただ、INSERTモードのままだと、&lt;br &#x2F;&gt;
保存ができないので、一旦ノーマルモードに戻る必要があります。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;ノーマルモードに戻るには、escキーを押します&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;そして、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:w&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;で保存ができます。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;3191292b-143c-b34e-6018-8abb229708df.png&quot; alt=&quot;Screenshot 2022-12-16 at 8.31.51.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;一番下に:wと表示されています。&lt;br &#x2F;&gt;
&lt;strong&gt;ノーマルモードで:と押すと、&lt;br &#x2F;&gt;
保存などのコマンドを実行することができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;:から始まっているキーバインドは、&lt;br &#x2F;&gt;
何らかのコマンドと思っていただいて大丈夫です。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;保存してvimを終了したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:wq(またはwq!など&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;保存せずにvimを終了したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;保存せずに強制終了したいときは、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;:q!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;uki-andou&quot;&gt;uキー(アンドゥ)&lt;&#x2F;h3&gt;
&lt;p&gt;こちらもノーマルモードでのキーで、&lt;br &#x2F;&gt;
普段のCtrl + ｚと同じような効果が得られます。&lt;&#x2F;p&gt;
&lt;p&gt;すなわち、&lt;strong&gt;直前の編集や変更を取り消してもとに戻す&lt;&#x2F;strong&gt;といった&lt;br &#x2F;&gt;
感じです。&lt;&#x2F;p&gt;
&lt;p&gt;間違って、編集してしまったときに、&lt;br &#x2F;&gt;
大変重宝するコマンドです。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;escki-jjki-kasutamukibaindo&quot;&gt;escキー&#x2F;jjキー(カスタムキーバインド)&lt;&#x2F;h3&gt;
&lt;p&gt;すでに紹介しましたが、&lt;br &#x2F;&gt;
&lt;strong&gt;escキーでノーマルモードに戻ることができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ただ、escキーはやや押しづらいので、&lt;br &#x2F;&gt;
カスタムキーバインドでjjなどにすることが多い気がします。&lt;&#x2F;p&gt;
&lt;p&gt;カスタマイズのやり方としては、&lt;br &#x2F;&gt;
vimの設定ファイルが、&lt;br &#x2F;&gt;
~&#x2F;.vimrcなので、&lt;br &#x2F;&gt;
このファイルを作成して、&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #F8F8F2; background-color: #272822;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #A6E22E;&quot;&gt;inoremap&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;silen&lt;&#x2F;span&gt;&lt;span&gt;t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt; jj&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #E6DB74;&quot;&gt;ES&lt;&#x2F;span&gt;&lt;span&gt;C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F92672;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;ターミナルをsourceコマンドなどで再読み込みしたら、&lt;br &#x2F;&gt;
jjでescと同様の動作にすることができます。&lt;&#x2F;p&gt;
&lt;p&gt;これは好みなので、escのままの人もいます。&lt;br &#x2F;&gt;
お好きなほうを選択してください。&lt;&#x2F;p&gt;
&lt;p&gt;inoremapってなんやねん？って感じだと思いますが、&lt;br &#x2F;&gt;
こちらは、下記の記事で詳しく解説しているので、&lt;br &#x2F;&gt;
気になる人はそちらを御覧ください。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;119&quot; label=&quot;参考&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;h3 id=&quot;j-k-l-hki-yi-dong&quot;&gt;j&#x2F;k&#x2F;l&#x2F;hキー(移動)&lt;&#x2F;h3&gt;
&lt;p&gt;さて、vimの移動ですが、&lt;br &#x2F;&gt;
&lt;strong&gt;ノーマルモードで、j&#x2F;k&#x2F;l&#x2F;hキーで&lt;br &#x2F;&gt;
基本的な移動ができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;jキーは、一行下へ(↓と同様)&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;kキーは、一行上へ(↑と同様)&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;lキーは、一文字右へ(→と同様)&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;hキーは、一文字左へ(←と同様)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;という感じです。&lt;&#x2F;p&gt;
&lt;p&gt;これらについては、&lt;br &#x2F;&gt;
心配しなくても使っているうちに、&lt;br &#x2F;&gt;
指に染み付いていきます。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kitoyi-dong-fang-fa-jian-suo&quot;&gt;&#x2F;キーと移動方法(検索)&lt;&#x2F;h3&gt;
&lt;p&gt;ノーマルモードで、&lt;br &#x2F;&gt;
&#x2F;を押すと、検索を始めることができます。&lt;&#x2F;p&gt;
&lt;p&gt;テストという文字を検索した例&lt;br &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;reisuta.com&#x2F;vim-basic&#x2F;abacd4be-7fdd-a550-ba56-e097d2bd62d2.png&quot; alt=&quot;Screenshot 2022-12-16 at 8.52.08.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;検索して複数ヒットした際は、&lt;&#x2F;strong&gt;&lt;br &#x2F;&gt;
&lt;strong&gt;nキーを押せば、次のマッチした候補に移動することができます。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Nキーを押せば、前のマッチした候補に移動しま&lt;&#x2F;strong&gt;す。&lt;&#x2F;p&gt;
&lt;p&gt;そのため、&#x2F;での検索は、ちょっとした移動コマンドとしても&lt;br &#x2F;&gt;
使えます。&lt;&#x2F;p&gt;
&lt;p&gt;例えば、4000行ぐらいあるファイルでも、&lt;br &#x2F;&gt;
console.logの行に移動したければ、&lt;br &#x2F;&gt;
間に何行あろうと、一瞬で移動することができます。&lt;&#x2F;p&gt;
&lt;p&gt;移動系については、他にもたくさんありますが、&lt;br &#x2F;&gt;
検索による移動は使う頻度が多いので、&lt;br &#x2F;&gt;
紹介しました。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ctrl-f-ctrl-b-sukuroru&quot;&gt;Ctrl + f &#x2F; Ctrl + b(スクロール)&lt;&#x2F;h3&gt;
&lt;p&gt;これらはスクロール系のコマンドで、&lt;br &#x2F;&gt;
ノーマルモードで、&lt;br &#x2F;&gt;
&lt;strong&gt;Ctrl + fを押すと、 1ページ下にスクロールします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;対して、&lt;strong&gt;Ctrl + bを押すと、 1ページ上にスクロールします。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ggki-gki-xian-tou-mo-wei&quot;&gt;ggキー&#x2F; Gキー(先頭・末尾)&lt;&#x2F;h3&gt;
&lt;p&gt;こちらも移動系で、&lt;br &#x2F;&gt;
&lt;strong&gt;ggキーで、ファイルの先頭に、 Gキーで、ファイルの最終行に移動します。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sonota-yokushi-ukiyi-lan&quot;&gt;その他よく使うキー一覧&lt;&#x2F;h2&gt;
&lt;p&gt;[st-square-checkbox bgcolor=&quot;&quot; bordercolor=&quot;&quot; fontweight=&quot;&quot; borderwidth=&quot;3&quot;]&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;p(ペースト)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;yy(ヤンク)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;dd(削除&#x2F;ヤンク)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;o&#x2F;Oインサート&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;a&#x2F;Aインサート&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Ctrl + r(取り消しの取り消し)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;x(文字の削除)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;r(置換)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;:term(ターミナルモード)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;[&#x2F;st-square-checkbox]&lt;&#x2F;p&gt;
&lt;p&gt;これらについては、別の記事で詳しく取り上げていますので、&lt;br &#x2F;&gt;
そちらもご覧いただけますと幸いです。&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;159&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;432&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;64&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;
&lt;p&gt;[st-card myclass=&quot;st-no-shadow&quot; id=&quot;295&quot; label=&quot;あわせて読みたい&quot; pc_height=&quot;&quot; name=&quot;&quot; bgcolor=&quot;#cccccc&quot; color=&quot;#ffffff&quot; webicon=&quot;st-svg-file-text-o&quot; readmore=&quot;on&quot; thumbnail=&quot;on&quot; type=&quot;text&quot;]&lt;&#x2F;p&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;9784297111694.jpg&quot; alt=&quot;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;マスタリングVim [ Ruslan Osipov 著、大倉 雅史 訳 ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0Vim%20%5B%20Ruslan%20Osipov%20%E8%91%97%E3%80%81%E5%A4%A7%E5%80%89%20%E9%9B%85%E5%8F%B2%20%E8%A8%B3%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;book&amp;#x2F;16278398&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000001734574.jpg&quot; alt=&quot;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;実践Vim　思考のスピードで編集しよう！【電子書籍】[ Drew　Neil ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=%E5%AE%9F%E8%B7%B5Vim%E3%80%80%E6%80%9D%E8%80%83%E3%81%AE%E3%82%B9%E3%83%94%E3%83%BC%E3%83%89%E3%81%A7%E7%B7%A8%E9%9B%86%E3%81%97%E3%82%88%E3%81%86%EF%BC%81%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20Drew%E3%80%80Neil%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;6e08bf5776463bf5a3cbc33848706e1f&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;

&lt;div class=&quot;easylink&quot;&gt;
  
  &lt;div class=&quot;easylink-thumb&quot;&gt;
    &lt;img src=&quot;2000002455902.jpg&quot; alt=&quot;Vim scriptテクニックバイブル ～Vim使いの魔法の杖【電子書籍】[ Vim scriptサポーターズ ]&quot; loading=&quot;lazy&quot;&gt;
  &lt;&#x2F;div&gt;
  
  &lt;div class=&quot;easylink-body&quot;&gt;
    &lt;p class=&quot;easylink-name&quot;&gt;Vim scriptテクニックバイブル ～Vim使いの魔法の杖【電子書籍】[ Vim scriptサポーターズ ]&lt;&#x2F;p&gt;
    &lt;div class=&quot;easylink-btns&quot;&gt;
      &lt;a class=&quot;easylink-btn easylink-amazon&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;www.amazon.co.jp&amp;#x2F;s&amp;#x2F;ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;amp;url=search-alias%3Daps&amp;amp;field-keywords=Vim%20script%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF%E3%83%90%E3%82%A4%E3%83%96%E3%83%AB%20%EF%BD%9EVim%E4%BD%BF%E3%81%84%E3%81%AE%E9%AD%94%E6%B3%95%E3%81%AE%E6%9D%96%E3%80%90%E9%9B%BB%E5%AD%90%E6%9B%B8%E7%B1%8D%E3%80%91%5B%20Vim%20script%E3%82%B5%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%BA%20%5D&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;Amazonで見る&lt;&#x2F;a&gt;
      &lt;a class=&quot;easylink-btn easylink-rakuten&quot; href=&quot;https:&amp;#x2F;&amp;#x2F;item.rakuten.co.jp&amp;#x2F;rakutenkobo-ebooks&amp;#x2F;de68b40e0a433d34bd6cad80d5d7f4d3&amp;#x2F;&quot; rel=&quot;sponsored nofollow noopener&quot; target=&quot;_blank&quot;&gt;楽天市場で見る&lt;&#x2F;a&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
</content>
        
    </entry>
</feed>
