<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Harrison Sanada</title>
    <description>The latest articles on DEV Community by Harrison Sanada (@duke13).</description>
    <link>https://dev.to/duke13</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F457005%2Fb73348bb-b969-44bc-a5fa-6b8fd1848a5c.png</url>
      <title>DEV Community: Harrison Sanada</title>
      <link>https://dev.to/duke13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/duke13"/>
    <language>en</language>
    <item>
      <title>RaspberryPiの初期セットアップ</title>
      <dc:creator>Harrison Sanada</dc:creator>
      <pubDate>Thu, 24 Oct 2024 08:44:59 +0000</pubDate>
      <link>https://dev.to/duke13/raspberrypinochu-qi-setutoatupu-mc2</link>
      <guid>https://dev.to/duke13/raspberrypinochu-qi-setutoatupu-mc2</guid>
      <description>&lt;p&gt;備忘録として、Raspberry Pi の初期セットアップ内容をここに記します。&lt;/p&gt;

&lt;p&gt;前提条件&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raspberry OS Lite (GUI なし)&lt;/li&gt;
&lt;li&gt;有線 LAN 接続&lt;/li&gt;
&lt;li&gt;SSH を用いて操作を行う&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SD カードにイメージの書き込み
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.raspberrypi.com/software/" rel="noopener noreferrer"&gt;Raspberry Pi Imager&lt;/a&gt; を用いて SD カードに OS を書き込みます。&lt;br&gt;
直感的な GUI のため、操作に迷うことはないはずです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!error] 注意&lt;br&gt;
OS イメージを書き込む時に SSH を有効にすることを忘れずに&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  初期設定
&lt;/h2&gt;

&lt;p&gt;SSH から接続する際に、毎回パスワード入力しないで済むように &lt;code&gt;ssh-copy-id&lt;/code&gt; コマンドを設定する&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id username@192.168.X.X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OS とファームウェアを最新化&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt full-upgrade &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt autoremove &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt autoclean &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;rpi-eeprom-update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OS を自動的に最新化&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;unattended-upgrades

&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/apt/apt.conf.d/50unattended-upgrades
&lt;span class="c"&gt;## すべてのファイルを更新対象にします&lt;/span&gt;
Unattended-Upgrade::Origins-Pattern &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"o=*,a=*"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// 自動的にインストールされた未使用のカーネル関連パッケージの削除する
Unattended-Upgrade::Remove-Unused-Kernel-Packages &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// アップグレード後、新たに使用されなくなった依存関係を自動削除する。
Unattended-Upgrade::Remove-New-Unused-Dependencies &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// アップグレード後に未使用のパッケージを自動削除する。
Unattended-Upgrade::Remove-Unused-Dependencies &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// アップグレード時にリブートが必要な場合にリブートする
Unattended-Upgrade::Automatic-Reboot &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// 自動リブート有効時にユーザーがログイン中であってもリブートする
Unattended-Upgrade::Automatic-Reboot-WithUsers &lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

// 自動リブート有効時にいつリブートするか
Unattended-Upgrade::Automatic-Reboot-Time &lt;span class="s2"&gt;"02:00"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IP アドレスの固定&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/dhcpcd.conf

&lt;span class="c"&gt;## 自分の環境に合わせて修正&lt;/span&gt;
interface eth0
static &lt;span class="nv"&gt;ip_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.1.26/24
static &lt;span class="nv"&gt;routers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.1.1
static &lt;span class="nv"&gt;domain_name_servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SD カード長命化&amp;amp;省電力化
&lt;/h2&gt;

&lt;p&gt;SD カードの寿命を伸ばす対策&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Swap 機能を無効化（SD カード Swap 書き込みを停止）
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt autoremove &lt;span class="nt"&gt;-y&lt;/span&gt; dphys-swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;RAMDISK(tmpfs) 機能を有効化（メモリ上にファイルを書き込む）
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fstab
&lt;span class="c"&gt;## 3行を末尾に追加&lt;/span&gt;
tmpfs /tmp tmpfs defaults,size&lt;span class="o"&gt;=&lt;/span&gt;256m,noatime,mode&lt;span class="o"&gt;=&lt;/span&gt;1777 0 0 
tmpfs /var/tmp tmpfs defaults,size&lt;span class="o"&gt;=&lt;/span&gt;256m,noatime,mode&lt;span class="o"&gt;=&lt;/span&gt;1777 0 0 
tmpfs /var/log tmpfs defaults,size&lt;span class="o"&gt;=&lt;/span&gt;32m,noatime,mode&lt;span class="o"&gt;=&lt;/span&gt;0755 0 0

&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Bluetooth と WiFi の無効化
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /boot/config.txt
or
&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /boot/firmware/config.txt

&lt;span class="c"&gt;## 以下を追加&lt;/span&gt;
&lt;span class="nv"&gt;dtoverlay&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;disable-bt
&lt;span class="nv"&gt;dtoverlay&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;disable-wifi

&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  セキュリティ対策
&lt;/h2&gt;

&lt;p&gt;外部から不正にアクセスがあったときに自動で BAN するアプリ&lt;code&gt;fail2ban&lt;/code&gt;を入れます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nb"&gt;install &lt;/span&gt;fail2ban
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start fail2ban
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fail2ban/jail.local

&lt;span class="o"&gt;[&lt;/span&gt;DEFAULT]
&lt;span class="c"&gt;# BAN除外&lt;/span&gt;
ignoreip &lt;span class="o"&gt;=&lt;/span&gt; 127.0.0.1/8 192.168.0.0/24 10.20.30.1/24

&lt;span class="c"&gt;# BANする時間&lt;/span&gt;
bantime &lt;span class="o"&gt;=&lt;/span&gt; 24h

&lt;span class="c"&gt;# 監視スパン（600秒）&lt;/span&gt;
findtime &lt;span class="o"&gt;=&lt;/span&gt; 600

&lt;span class="c"&gt;# 最大パスワード失敗回数&lt;/span&gt;
maxretry &lt;span class="o"&gt;=&lt;/span&gt; 3

&lt;span class="c"&gt;# SSHD のBANを有効化&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;sshd]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;backend &lt;span class="o"&gt;=&lt;/span&gt; systemd

&lt;span class="c"&gt;# 再発した場合は動作を重くする&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;recidive]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;新しい Ubuntu および Debian システムでの syslog から systemd ベースのログへの移行に関連しています。Fail2ban は、デフォルトでは systemd ジャーナルと連携するように適切に構成されていません。&lt;br&gt;
そのため、空のログファイルを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo touch&lt;/span&gt; /var/log/fail2ban.log
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;640 /var/log/fail2ban.log
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;実際に BAN された IP アドレスを確認する方法&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fail2ban-client status sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/_atachment%2Fnotbyai%2FWritten-By-Human-Not-By-AI-Badge-white.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/_atachment%2Fnotbyai%2FWritten-By-Human-Not-By-AI-Badge-white.png" alt="Written-By-Human-Not-By-AI-Badge-white" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>OracleCloudで自分だけのストレージと開発環境を構築する方法</title>
      <dc:creator>Harrison Sanada</dc:creator>
      <pubDate>Thu, 24 Oct 2024 08:44:27 +0000</pubDate>
      <link>https://dev.to/duke13/oracleclouddezi-fen-dakenosutorezitokai-fa-huan-jing-wogou-zhu-surufang-fa-578n</link>
      <guid>https://dev.to/duke13/oracleclouddezi-fen-dakenosutorezitokai-fa-huan-jing-wogou-zhu-surufang-fa-578n</guid>
      <description>&lt;p&gt;Oracle Cloud は気前よく高スペック（CPU:4 コア，Memory:24GB）の Arm のインスタンスを無料で提供しています。&lt;/p&gt;

&lt;p&gt;Web 接続環境さえあれば、どこでも接続できる個人用のストレージと開発環境を構築する方法を説明します。&lt;/p&gt;

&lt;p&gt;構成イメージは下図通り、外部公開する VM（バーチャルマシン）を作成し、docker を用いて Visual Studio Code をブラウザベースで動作する code-server とNextcloud を構築します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4su7jds4xkd32ott4odo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4su7jds4xkd32ott4odo.png" width="672" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;本手順の実施にあたり必要なものは以下です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Oracle Cloud Infrastructure のアカウント

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/manaki/items/d8684f8e15ccf09bdc4e#%E3%81%8A%E3%82%B9%E3%82%B9%E3%83%A1%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88" rel="noopener noreferrer"&gt;Oracle cloud -アカウントの登録方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;独自ドメイン

&lt;ul&gt;
&lt;li&gt;Cloudflare で購入することを推奨します&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  インスタンス作成
&lt;/h2&gt;

&lt;p&gt;下記の Oracle 公式の手順 (3.インターネット・アクセスの有効化まで) に従い、インスタンスを立ててください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/ja-jp/iaas/developer-tutorials/tutorials/wp-on-ubuntu/01-summary.htm" rel="noopener noreferrer"&gt;Free Tier: Ubuntu インスタンスへの WordPress のインストール&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;作成する VM タイプは最新の Ubuntu にし、CPU も ARM に変更してください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OS イメージ : Ubuntu 22.04&lt;/li&gt;
&lt;li&gt;CPU : Arm&lt;/li&gt;
&lt;li&gt;ボリューム : 100GB&lt;/li&gt;
&lt;li&gt;CPU コア数 : 4 コア以下&lt;/li&gt;
&lt;li&gt;メモリ : 24GB 以下&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;また、Web と SSH 接続するため、&lt;code&gt;VCNのイングレス・ルールの作成&lt;/code&gt; の部分で &lt;em&gt;22, 80 ,443&lt;/em&gt; 解放しておいてください。&lt;/p&gt;

&lt;p&gt;持っている独自ドメインを作成したインスタンスの IP と紐付けの DNS レコード登録を行います。&lt;br&gt;
ここで CloudFlare の DNS 登録手順を掲載しておきます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cloudflare.com/ja-jp/learning/dns/dns-records/" rel="noopener noreferrer"&gt;https://www.cloudflare.com/ja-jp/learning/dns/dns-records/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  インスタンス設定
&lt;/h2&gt;

&lt;p&gt;インスタンス作成完了後に、ローカルより ssh でアクセスして、OS の最新化にします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nt"&gt;-y&lt;/span&gt; update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nt"&gt;-y&lt;/span&gt; upgrade &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nt"&gt;-y&lt;/span&gt; autoremove 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Oracle Cloud の Ubuntu インスタンスは ufw を用いてポートを開放できない問題があるため、iptables を無効にしておきます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;iptables &lt;span class="nt"&gt;-F&lt;/span&gt;
netfilter-persistent save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  docker を使ったコンテナ作成
&lt;/h2&gt;

&lt;p&gt;code-server と nextcloud のコンテナを建てるため、&lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;公式ドキュメント&lt;/a&gt;に従い docker をインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get remove docker docker-engine docker.io containerd runc
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl gnupg

&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-d&lt;/span&gt; /etc/apt/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.gpg
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;a+r /etc/apt/keyrings/docker.gpg

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"deb [arch="&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  "&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VERSION_CODENAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;" stable"&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;コンテナのデータを格納するフォルダを作成し、そのフォルダに入ります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;mycloud
&lt;span class="nb"&gt;cd &lt;/span&gt;mycloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;docker-compose.yml のファイルを作成して、内容は以下です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nextcloud&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./data:/var/www/html&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_HOST=db&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_DATABASE=nextcloud&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_USER=nextcloud&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_PASSWORD=trongpassword&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;

  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mariadb:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud-db&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./db:/var/lib/mysql&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_ROOT_PASSWORD=mystrongrootpassword&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_DATABASE=nextcloud&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_USER=nextcloud&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;MYSQL_PASSWORD=mystrongpassword&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;


  &lt;span class="na"&gt;caddy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nextcloud-caddy&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;nextcloud&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./caddy/Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./caddy/data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./caddy/config:/config&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;


  &lt;span class="na"&gt;code-server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linuxserver/code-server&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;code-server&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Asia/Tokyo&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PASSWORD=pass&lt;/span&gt; &lt;span class="c1"&gt;#optional&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SUDO_PASSWORD=pass&lt;/span&gt; &lt;span class="c1"&gt;#optional&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PROXY_DOMAIN=your.domain.com&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./code-server:/config&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./project:/home/project&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;8443:8443&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;docker のコンテナを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Web サーバーの SSL 暗号化通信を設定する&lt;code&gt;caddy/Caddyfile&lt;/code&gt;というファイルを編集します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nextcloud.yourdomain.com {
  reverse_proxy nextcloud:80
  header Strict-Transport-Security max-age=31536000;
  encode gzip
  file_server
}

vscode.yourdomain.com {
  reverse_proxy code-server:8443
  header Strict-Transport-Security max-age=31536000;
  encode gzip
  file_server
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;また、nextcloud のコンテナの初期設定は http 通信のため、https に変更します。以下の一行を追加します。&lt;br&gt;
編集するファイル：&lt;code&gt;data/config/config.php&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nv"&gt;$CONFIG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="mf"&gt;...&lt;/span&gt;
  &lt;span class="s1"&gt;'overwriteprotocol'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'https'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="mf"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;そして、コンテナを再起動します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker compose restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nextcloud のメンテナンスジョブを定期的に動かせるように、cron ジョブを設定します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo crontab -e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;追加内容&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;*&lt;/span&gt;/15 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; www-data nextcloud php cron.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;本記事の手順を全て無事に完了していれば、Web ブラウザーからドメインアクセスすることで code-server と nextcloud にアクセスできます。そこから初期設定して、自分独自の環境を楽しみましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dh8yk384c6undlqp3m5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3dh8yk384c6undlqp3m5.png" width="635" height="879"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Gitのプロキシ設定を自動的に切り替える方法</title>
      <dc:creator>Harrison Sanada</dc:creator>
      <pubDate>Thu, 24 Oct 2024 08:44:10 +0000</pubDate>
      <link>https://dev.to/duke13/gitnopurokisishe-ding-wozi-dong-de-niqie-riti-erufang-fa-192l</link>
      <guid>https://dev.to/duke13/gitnopurokisishe-ding-wozi-dong-de-niqie-riti-erufang-fa-192l</guid>
      <description>&lt;p&gt;リモートワークの際に、ネットワーク環境が社外⇔社内と交互に切り替えることがあります。&lt;/p&gt;

&lt;p&gt;その際に、Git のグローバル設定で手動でプロキシを追加したり、外したりする必要があります。&lt;/p&gt;

&lt;p&gt;作業自体は簡単ですが、さすがに毎回行うのは面倒くさいので自動化する方法を作成しました。&lt;/p&gt;

&lt;h2&gt;
  
  
  前提条件
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OS 環境：Windows10~11&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Git proxy 切り替えスクリプト作成
&lt;/h2&gt;

&lt;p&gt;まずは社内 or 社外環境を判定し、Git 設定を変更する BAT スクリプトを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;@echo &lt;span class="na"&gt;off&lt;/span&gt;
&lt;span class="nb"&gt;setlocal&lt;/span&gt;

&lt;span class="c"&gt;:: proxy server に ping を送る&lt;/span&gt;
&lt;span class="nb"&gt;ping&lt;/span&gt; &lt;span class="na"&gt;-n &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="na"&gt;-w &lt;/span&gt;&lt;span class="m"&gt;500&lt;/span&gt; &lt;span class="kd"&gt;proxy_server&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kr"&gt;nul&lt;/span&gt;

&lt;span class="c"&gt;:: ping 結果でgit proxy ON or OFF を設定する&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;errorlevel&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;Unset&lt;/span&gt; &lt;span class="kd"&gt;global&lt;/span&gt; &lt;span class="kd"&gt;proxy&lt;/span&gt;
    &lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;config&lt;/span&gt; &lt;span class="na"&gt;--global &lt;/span&gt;&lt;span class="kd"&gt;http&lt;/span&gt;.proxy &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="kd"&gt;Set&lt;/span&gt; &lt;span class="kd"&gt;global&lt;/span&gt; &lt;span class="kd"&gt;proxy&lt;/span&gt;
    &lt;span class="kd"&gt;git&lt;/span&gt; &lt;span class="kd"&gt;config&lt;/span&gt; &lt;span class="na"&gt;--global &lt;/span&gt;&lt;span class="kd"&gt;http&lt;/span&gt;.proxy &lt;span class="kd"&gt;http&lt;/span&gt;://user:password@proxy_server:port
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  スクリプトのタスク化
&lt;/h2&gt;

&lt;p&gt;つぎに、Windows のタスクスケジューラーを使用して、作成した BAT ファイルを 5 分ごとに実行するように設定します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;「スタート」メニューを開き、「タスクスケジューラー」を検索して開きます。&lt;/li&gt;
&lt;li&gt;「アクション」メニューから「新しいタスクの作成」を選択します。&lt;/li&gt;
&lt;li&gt;「名前」フィールドにタスクの名前を入力し、「説明」フィールドにタスクの説明を入力します（オプション）。次に、「次へ」をクリックします。&lt;/li&gt;
&lt;li&gt;「トリガー」画面で、「毎日」を選択し、「次へ」をクリックします。&lt;/li&gt;
&lt;li&gt;「毎日」画面で、「繰り返し間隔」フィールドに「5 分」に設定し、「継続期間」を無制限にし、「次へ」をクリックします。&lt;/li&gt;
&lt;li&gt;「アクション」画面で、「プログラムの開始」を選択し、「次へ」をクリックします。&lt;/li&gt;
&lt;li&gt;「プログラムの開始」画面で、「プログラム/スクリプト」フィールドに BAT ファイルのフルパスを入力します。次に、「次へ」をクリックします。&lt;/li&gt;
&lt;li&gt;「完了」画面で設定を確認し、「完了」をクリックします。&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  追記
&lt;/h2&gt;

&lt;p&gt;定期的に実行されるため、バッチのコンソールウィンドウが表示されてしまい、作業の気が散ります。&lt;br&gt;
対策として VBS を用いてバックグラウンド実行するようにします。&lt;/p&gt;

&lt;p&gt;以下の VBScript を作成して、タスクスケジューラーの引数に BAT ファイルを指定することで、コンソール画面が前面に現れることを回避できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set ws = CreateObject("Wscript.Shell") 
ws.run "cmd /c " &amp;amp; Wscript.Arguments(0), vbhide
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;たかが 1~2 分の簡単な作業でも塵積って山となることもあるので、自動化が可能ならどんどん自動化をしてしまおう。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>anyenvを用いてCleanなMac開発環境を構築する</title>
      <dc:creator>Harrison Sanada</dc:creator>
      <pubDate>Thu, 24 Oct 2024 08:43:50 +0000</pubDate>
      <link>https://dev.to/duke13/anyenvwoyong-itecleannamackai-fa-huan-jing-wogou-zhu-suru-45i9</link>
      <guid>https://dev.to/duke13/anyenvwoyong-itecleannamackai-fa-huan-jing-wogou-zhu-suru-45i9</guid>
      <description>&lt;p&gt;これから開発者として新品の Mac を手に入れましたあなたに、なるべく Clean な開発環境の構築方法を説明します。&lt;/p&gt;

&lt;p&gt;ここで言う Clean の定義とは、各種のプログラミング言語をインストールして、バージョンを切り替えられる構成の意味です。&lt;/p&gt;

&lt;p&gt;今回は、Pyhton , Node.js , Java の環境構築の手順を詳しく解説していきます。&lt;/p&gt;

&lt;p&gt;**環境のイメージ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gjm76mnti90tsm7u1nz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gjm76mnti90tsm7u1nz.png" width="658" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Homebrew のインストール
&lt;/h2&gt;

&lt;p&gt;まずは、パッケージマネージャーの [Homebrew][1] をインストールしましょう。Mac を使う以上、いずれインストールすることになると思います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. anyenv のインストール
&lt;/h2&gt;

&lt;p&gt;次に各種プログラミング言語のバージョンを一括管理できる [anyenv][2] をインストールします。&lt;br&gt;
先ほど Homebrew を使って以下のコマンドでインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;anyenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;インストール後に zsh の Path を通し、反映させます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(anyenv init -)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nb"&gt;.&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;そして、anyenv の初期化を以下のコマンドで行います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;anyenv &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;anyenv を使う上、便利なプラグインもこの際ついでに入れていきましょう。&lt;br&gt;
もちろん、プラグインを選定する派でしたら、以下の手順を飛ばして構いません。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/znz/anyenv-update.git ~/.anyenv/plugins/anyenv-update
git clone https://github.com/znz/anyenv-git.git ~/.anyenv/plugins/anyenv-git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Python の導入
&lt;/h2&gt;

&lt;p&gt;anyenv の中の pyenv を用いて、指定したバージョンの Python のインストール方法です。&lt;/p&gt;

&lt;p&gt;まず最初に pyenv を導入して、シェルに反映されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;anyenv &lt;span class="nb"&gt;install &lt;/span&gt;pyenv
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pyenv で &lt;code&gt;-l&lt;/code&gt; 引数で インストール可能なバージョンを確認して、欲しいバージョンの Python をインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pyenv &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
pyenv &lt;span class="nb"&gt;install &lt;/span&gt;3.10.2
pyenv &lt;span class="nb"&gt;install &lt;/span&gt;2.7.18
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;そして、pyenv で使いたいバージョンに簡単に切り替えることも可能です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pyenv global 3.10.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最後に、インストール済みの Python のバージョンやインストール先を確認して完了です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;--version&lt;/span&gt;
which python
which pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Node.js の導入
&lt;/h2&gt;

&lt;p&gt;anyenv の中の nodenv を用いて、指定したバージョンの Node.js のインストール方法です。&lt;br&gt;
手順は pyenv と似てます。&lt;/p&gt;

&lt;p&gt;まず最初に nodenv を導入して、シェルに反映されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;anyenv &lt;span class="nb"&gt;install &lt;/span&gt;nodenv
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-l&lt;/code&gt; 引数で インストール可能なバージョンを確認して、欲しいバージョンの Node.js をインストールします。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nodenv &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
nodenv &lt;span class="nb"&gt;install &lt;/span&gt;16.14.0
nodenv &lt;span class="nb"&gt;install &lt;/span&gt;17.6.0
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nodenv で使いたいバージョンに簡単に切り替えます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nodenv global 16.14.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最後に Node.js バージョン確認して完了です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
npm &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Java の導入
&lt;/h2&gt;

&lt;p&gt;Java の導入方法は Python や Node.js とは異なり、Java 本体は anyenv ではなく、brew を使ってインストールします。そして、バージョン切替は  anyenv の jenv を使います。&lt;/p&gt;

&lt;p&gt;まずは、anyenv の jenv インストール、JAVA_HOME を自動で設定するようにするプラグイン導入します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;anyenv &lt;span class="nb"&gt;install &lt;/span&gt;jenv
jenv enable-plugin &lt;span class="nb"&gt;export
exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;次に Homebrew を用いて Java をインストールします。今回はすべて Java の LTS バージョンを入れます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;openjdk@8
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; /usr/local/opt/openjdk@8/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-8.jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;openjdk@11
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;openjdk@17
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-sfn&lt;/span&gt; /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;インストールした Java と jenv を紐づかせます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; /Library/Java/JavaVirtualMachines
jenv add /Library/Java/JavaVirtualMachines/openjdk-8.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これで  jenv で Java のバージョンを確認でき、指定したバージョンに切り替えることが可能です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jenv versions
jenv global 17.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;最後に、現在の Java バージョンと JAVA_HOME を確認して完了です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$JAVA_HOME&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6 .NET の導入
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap isen-ng/dotnet-sdk-versions
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; dotnet-sdk8-0-100
brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; dotnet-sdk6-0-400

dotnet &lt;span class="nt"&gt;--list-sdks&lt;/span&gt;
&lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$SHELL&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;

dotnet new globaljson &lt;span class="nt"&gt;--sdk-version&lt;/span&gt; 6.0.414
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  最後に
&lt;/h2&gt;

&lt;p&gt;今後他の言語を使う必要がある際に、anyenv を使えば簡単に導入できます。&lt;br&gt;
メジャーなプログラミング言語ならほとんど anyenv で管理できます。&lt;/p&gt;

&lt;p&gt;そして、ときどき env を更新して最新バージョンのプログラミング言語をインストールできる状態にしておきましょう。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;anyenv update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  参考
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://brew.sh/index_ja" rel="noopener noreferrer"&gt;https://brew.sh/index_ja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/anyenv/anyenv" rel="noopener noreferrer"&gt;https://github.com/anyenv/anyenv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.mksc.jp/contents/apple-silicon" rel="noopener noreferrer"&gt;https://blog.mksc.jp/contents/apple-silicon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zenn.dev/atsushi570/articles/4eb9676da6f9b2" rel="noopener noreferrer"&gt;https://zenn.dev/atsushi570/articles/4eb9676da6f9b2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
