<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FITSブログ</title>
	<atom:link href="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com</link>
	<description>Webシステムの受託開発でお困りなら</description>
	<lastBuildDate>Sat, 21 Feb 2026 07:50:14 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/cropped-image-5-32x32.png</url>
	<title>FITSブログ</title>
	<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>ClaudeCodeでブログ引っ越しをやってみたら、ネコちゃんが大活躍した話</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2026/02/21/claudecode%e3%81%a7%e3%83%96%e3%83%ad%e3%82%b0%e5%bc%95%e3%81%a3%e8%b6%8a%e3%81%97%e3%82%92%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f%e3%82%89%e3%80%81%e3%83%8d%e3%82%b3%e3%81%a1%e3%82%83%e3%82%93/</link>
		
		<dc:creator><![CDATA[editor]]></dc:creator>
		<pubDate>Sat, 21 Feb 2026 07:49:54 +0000</pubDate>
				<category><![CDATA[AI／Claude記事]]></category>
		<guid isPermaLink="false">http://127.0.0.1/?p=1178</guid>

					<description><![CDATA[仙台でWebシステムの受託開発を行っている株式会社FITSです。 弊社では業務のさまざまな場面でAIを活用しています。今回は、会社のブログサーバーの引っ越し作業を、AIエージェント（Claude Code）と一緒にやって [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>仙台でWebシステムの受託開発を行っている株式会社FITSです。</p>
<p>弊社では業務のさまざまな場面でAIを活用しています。今回は、<strong>会社のブログサーバーの引っ越し作業を、AIエージェント（Claude Code）と一緒にやってみた</strong>話をご紹介します。しかもネコちゃんが作業してくれます。</p>
<h2>きっかけ：ブログのサーバーを新しくしたい</h2>
<p>弊社のブログは、AWSのLightsailというサービスの上でWordPressを動かして運用しています。</p>
<p>このブログサーバー、もともと一番小さいプラン（メモリ0.5GB）で動かしていたのですが、WordPressを快適に動かすにはちょっと力不足。さらに、サーバーに入っているソフトウェア（データベースやWebサーバー）のバージョンが古くなってきていました。</p>
<p>そこで、<strong>新しいサーバーを立てて、データを引っ越そう</strong>ということに。ついでにメモリも倍増させます。</p>
<table style="border-collapse:collapse; width:100%;">
<thead>
<tr>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">項目</th>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">旧サーバー</th>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">新サーバー</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ccc; padding:8px;">メモリ</td>
<td style="border:1px solid #ccc; padding:8px;">0.5GB</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>1.0GB（2倍）</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">ディスク</td>
<td style="border:1px solid #ccc; padding:8px;">20GB</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>40GB（2倍）</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">月額</td>
<td style="border:1px solid #ccc; padding:8px;">$5.0</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>$7.0（+$2）</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">データベース</td>
<td style="border:1px solid #ccc; padding:8px;">古いバージョン</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>最新バージョン</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">Webサーバー</td>
<td style="border:1px solid #ccc; padding:8px;">古いバージョン</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>最新バージョン</strong></td>
</tr>
</tbody>
</table>
<p>月額たった$2アップで、メモリもディスクも倍。ソフトウェアも全部最新。やらない理由がありません。</p>
<h2>でも、サーバーの引っ越しってめんどくさい</h2>
<p>サーバーの引っ越しって、地味に手順が多いんです。</p>
<ol>
<li>新しいサーバーを作る</li>
<li>セキュリティの設定をする</li>
<li>旧サーバーからデータベースやファイルをコピーする</li>
<li>新サーバーに取り込む</li>
<li>ちゃんと動くか確認する</li>
<li>ネットワークの向き先を切り替える</li>
<li>SSL証明書（httpsの鍵）を設定する</li>
<li>後片付けをする</li>
</ol>
<p>手作業でやると、どこかで打ち間違えたり、手順を飛ばしたりしがち。そこで……</p>
<h2>AIに全部やらせよう</h2>
<p><strong>Claude Code</strong>（Anthropic社が提供するAIエージェント）は、ターミナル（黒い画面）で動くAIです。人間がキーボードで打つコマンドを、AIが代わりに実行してくれます。</p>
<p>つまり、<strong>サーバーにSSH接続してコマンドを打つ作業</strong>も、AIにお任せできるわけです。</p>
<h3>やったこと</h3>
<p>Claude Codeに「ブログサーバーを新しいインスタンスに移行して」と伝えたところ、こんな流れで進みました。</p>
<ol>
<li><strong>計画を立てる</strong> — AIが移行手順を10ステップで提案（数秒）</li>
<li><strong>移行スクリプトを作る</strong> — AIが約330行のシェルスクリプトを自動生成（数十秒）</li>
<li><strong>人間がレビューする</strong> — 内容を確認してバグを1件発見・修正（数分）</li>
<li><strong>実行する</strong> — スクリプトを実行して、AIが全工程を自動で処理</li>
</ol>
<p>計画もスクリプト作成も一瞬。人間がやるのはレビュー（確認）だけです。</p>
<h2>レビューで見つけたバグ</h2>
<p>AIが作ったスクリプト、ほぼ完璧だったのですが、1つだけバグがありました。</p>
<p>サーバーの引っ越しでは、途中でネットワークのアドレスを旧サーバーから新サーバーに付け替えます。AIはこの<strong>「付け替えた後も、古いアドレスに接続しようとしていた」</strong>んです。</p>
<p>住所が変わったのに、前の住所に手紙を送っちゃうようなもの。これは人間がレビューして発見・修正しました。</p>
<p>ちなみに、今のAIは<strong>プロンプト（指示）や用途を適切に設計すれば、レビュー作業もAIに任せることができます。</strong>今回はあえて人間がレビューしましたが、次回は「レビュー担当AI」を用意するのもアリですね。</p>
<h2>作業ネコちゃんと監督ネコちゃん</h2>
<p>せっかくなので、実行も少し楽しくしました。</p>
<p>画面を上下に2分割して、<strong>「作業ネコちゃん」</strong>（作業する側）と<strong>「監督ネコちゃん」</strong>（チェックする側）の2匹のAIエージェントに役割を分けて実行させました。</p>
<p>監督ネコちゃんは、作業ネコちゃんから報告を受けるたびに内容をチェックして、問題なければ<strong>「ヨシッ！」</strong>と承認します。特に重要な工程（ネットワーク切り替えなど）では、監督ネコちゃんの承認がないと先に進めない仕組みです。</p>
<p><!-- ターミナル風モックアップ：監督ネコちゃんが作業を承認している様子 --></p>
<div style="background:#1e1e1e; border-radius:8px; overflow:hidden; font-family:'Courier New',Consolas,monospace; font-size:13px; line-height:1.6; margin:1.5em 0; max-width:100%;">
<!-- タイトルバー --></p>
<div style="background:#333; padding:6px 12px; display:flex; align-items:center;">
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#ff5f56; margin-right:6px;"></span><br />
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#ffbd2e; margin-right:6px;"></span><br />
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#27c93f; margin-right:6px;"></span><br />
<span style="color:#999; font-size:12px; margin-left:8px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 監督ネコちゃん</span>
</div>
<p><!-- 監督ネコちゃんのペイン --></p>
<div style="padding:12px 16px; color:#d4d4d4; border-bottom:2px solid #444;">
<div style="color:#888;">── 監督ネコちゃん ──</div>
<div><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cb.png" alt="📋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 作業ネコちゃんからの報告を確認中&#8230;</span></div>
<div>&nbsp;</div>
<div><span style="color:#569cd6;">【フェーズ6: 動作確認（仮IP）】</span></div>
<div><span style="color:#d4d4d4;">  WordPress管理画面&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OK</span></div>
<div><span style="color:#d4d4d4;">  ブログ表示&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OK</span></div>
<div><span style="color:#d4d4d4;">  データベース&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OK</span></div>
<div><span style="color:#4ec9b0; font-weight:bold;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 監督ネコちゃん「ヨシッ！動作確認OKニャ！」</span></div>
<div>&nbsp;</div>
<div><span style="color:#ce9178;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 【フェーズ7: ネットワーク切り替え】— 重要工程</span></div>
<div><span style="color:#ce9178;">  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> この工程は監督ネコちゃんの承認が必要です</span></div>
<div><span style="color:#d4d4d4;">  旧サーバーからIPアドレスを切り離し&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span></div>
<div><span style="color:#d4d4d4;">  新サーバーにIPアドレスを割り当て&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span></div>
<div><span style="color:#4ec9b0; font-weight:bold;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 監督ネコちゃん「ヨシッ！切り替えてOKニャ！」</span></div>
</div>
<p><!-- 作業ネコちゃんのペイン --></p>
<div style="padding:12px 16px; color:#d4d4d4;">
<div style="color:#888;">── 作業ネコちゃん ──</div>
<div><span style="color:#569cd6;">【フェーズ7: ネットワーク切り替え】</span><span style="color:#6a9955;"> 実行中&#8230;</span></div>
<div><span style="color:#d4d4d4;">  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e1.png" alt="📡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 監督ネコちゃんの承認を確認&#8230; </span><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 承認済み</span></div>
<div><span style="color:#d4d4d4;">  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> IPアドレス切り替え中&#8230;</span></div>
<div><span style="color:#6a9955;">  <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ネットワーク切り替え完了！</span></div>
</div>
</div>
<p style="text-align:center; color:#666; font-size:0.9em;">監督ネコちゃんが「ヨシッ！」で承認。ネットワーク切り替えという重要な工程も安心です。</p>
<p><!-- ターミナル風モックアップ：全工程完了の様子 --></p>
<div style="background:#1e1e1e; border-radius:8px; overflow:hidden; font-family:'Courier New',Consolas,monospace; font-size:13px; line-height:1.6; margin:1.5em 0; max-width:100%;">
<!-- タイトルバー --></p>
<div style="background:#333; padding:6px 12px; display:flex; align-items:center;">
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#ff5f56; margin-right:6px;"></span><br />
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#ffbd2e; margin-right:6px;"></span><br />
<span style="display:inline-block; width:12px; height:12px; border-radius:50%; background:#27c93f; margin-right:6px;"></span><br />
<span style="color:#999; font-size:12px; margin-left:8px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 移行完了！</span>
</div>
<p><!-- 監督ネコちゃんのペイン --></p>
<div style="padding:12px 16px; color:#d4d4d4; border-bottom:2px solid #444;">
<div style="color:#888;">── 監督ネコちゃん ──</div>
<div><span style="color:#569cd6;">[進捗: 10/10 フェーズ完了]</span></div>
<div>&nbsp;</div>
<div><span style="color:#4ec9b0; font-weight:bold; font-size:1.1em;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f389.png" alt="🎉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 全フェーズ完了！ヨシッ！！！</span></div>
<div><span style="color:#4ec9b0;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 作業ネコちゃんお疲れさまニャ！</span></div>
<div><span style="color:#4ec9b0;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f431.png" alt="🐱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ブログ記事も書くニャよ！</span></div>
<div>&nbsp;</div>
<div><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 監督業務完了ニャ</span></div>
</div>
<p><!-- 作業ネコちゃんのペイン --></p>
<div style="padding:12px 16px; color:#d4d4d4;">
<div style="color:#888;">── 作業ネコちゃん ──</div>
<div><span style="color:#6a9955;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> フェーズ10: 後片付け&#8230; 完了</span></div>
<div>&nbsp;</div>
<div><span style="color:#4ec9b0; font-weight:bold; font-size:1.1em;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f389.png" alt="🎉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 移行完了ニャーーー！！！</span></div>
<div>&nbsp;</div>
<div><span style="color:#569cd6;">====================================</span></div>
<div><span style="color:#569cd6;">  全10フェーズ正常完了</span></div>
<div><span style="color:#569cd6;">  ブログURL: https://blog.fits-inc.jp</span></div>
<div><span style="color:#569cd6;">====================================</span></div>
</div>
</div>
<p style="text-align:center; color:#666; font-size:0.9em;">全工程完了！監督ネコちゃん「ヨシッ！！！」作業ネコちゃん「移行完了ニャーーー！！！」</p>
<p>実際の作業はすべてAIが自動で行っています。人間はターミナルを眺めているだけ。ネコちゃんたちが頑張ってくれました。</p>
<h2>移行結果</h2>
<p>無事、ブログの引っ越しが完了しました。</p>
<table style="border-collapse:collapse; width:100%;">
<thead>
<tr>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">項目</th>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">移行前</th>
<th style="border:1px solid #ccc; padding:8px; background:#f5f5f5;">移行後</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #ccc; padding:8px;">メモリ</td>
<td style="border:1px solid #ccc; padding:8px;">0.5GB</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>1.0GB</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">データベース</td>
<td style="border:1px solid #ccc; padding:8px;">旧バージョン</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>最新バージョン</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">Webサーバー</td>
<td style="border:1px solid #ccc; padding:8px;">旧バージョン</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>最新バージョン</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">SSL証明書</td>
<td style="border:1px solid #ccc; padding:8px;">設定済み</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>新規取得・設定済み</strong></td>
</tr>
<tr>
<td style="border:1px solid #ccc; padding:8px;">月額</td>
<td style="border:1px solid #ccc; padding:8px;">$5.0</td>
<td style="border:1px solid #ccc; padding:8px;"><strong>$7.0</strong></td>
</tr>
</tbody>
</table>
<p>サーバーの中身はすべて最新になり、メモリにも余裕ができました。ブログの表示速度も体感で速くなっています。</p>
<h2>AIにインフラ作業を任せてみて</h2>
<p>今回の移行を通じて感じたのは、<strong>AIは「速くて正確な作業員」として非常に優秀</strong>だということです。</p>
<ul>
<li><strong>計画立案：</strong>移行手順の洗い出しが数秒で完了</li>
<li><strong>スクリプト生成：</strong>330行の移行スクリプトが数十秒で完成</li>
<li><strong>実行：</strong>10ステップの作業を自動で正確に実行</li>
<li><strong>チェック体制：</strong>監督ネコちゃん＋作業ネコちゃんの2体制で安全に運用</li>
</ul>
<p>今回は人間がスクリプトをレビューしてバグを1件見つけましたが、実はこの<strong>レビュー作業もAIに任せることができます。</strong>プロンプト（指示）や用途を適切に設計すれば、AIが計画・実行・チェックまで一貫して担える時代になっています。</p>
<p>もちろん、<strong>お客様の大事なシステムをお預かりする以上、最終的な判断と責任は人間が持ちます。</strong>大事なのは、「AIにどこまで任せて、どこで人間が判断するか」を正しく設計すること。AIの得意・不得意を把握した上で、適切に使い分けることが重要です。</p>
<h2>まとめ</h2>
<p>弊社FITSは仙台を拠点に、こうした<strong>AI活用を日常の業務に取り入れながら</strong>、Webシステムの開発・運用を行っています。</p>
<p>「AIってどう使うの？」「自社の業務にも使えるの？」といったご相談も大歓迎です。<strong>仙台でAIを使っていろいろやっている会社</strong>として、お気軽にお声がけください。</p>
<hr />
<p><em>この記事の執筆・移行作業は、Claude Code（Anthropic）を活用して実施しました。ネコちゃんたちもお疲れさまでした。</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>さかえさんのランチに行ってきました</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/10/22/%e3%81%95%e3%81%8b%e3%81%88%e3%81%95%e3%82%93%e3%81%ae%e3%83%a9%e3%83%b3%e3%83%81%e3%81%ab%e8%a1%8c%e3%81%a3%e3%81%a6%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Tue, 22 Oct 2024 04:13:41 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1155</guid>

					<description><![CDATA[JAビル宮城の地下にある「さかえ」さんのランチで天丼を頂いてきました！こちらのお店は16:00-22:00営業の、天ぷらやお寿司が味わえる居酒屋さんなのですが、先日訪問した際に「ランチもやってるよー」ということだったので [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>JAビル宮城の地下にある「さかえ」さんのランチで天丼を頂いてきました！こちらのお店は16:00-22:00営業の、天ぷらやお寿司が味わえる居酒屋さんなのですが、先日訪問した際に「ランチもやってるよー」ということだったので行ってきました！</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="759" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-1024x759.png" alt="" class="wp-image-1156" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1024x759.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-300x223.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-768x570.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1536x1139.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image.png 2044w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>場所はJAビルの地下です。JAビルはオフィスのある南町通りからは遠いので、自転車で行く感じですね。表には写真みたいに看板しか出てないのですが、JAビルの横の階段を下がっていくと・・</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="759" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-1-1024x759.png" alt="" class="wp-image-1157" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1-1024x759.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1-300x223.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1-768x570.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1-1536x1139.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-1.png 2044w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ご覧のように地下への入り口が現れ、入り口進んで真ん中ほどにお店があります。「寿司」「天ぷら」「極上麦酒」ののれんがかっこいいですね！（天ぷらののれんは畳まれてますが）なお入り口は手動ドアなので、手をかけてぐっと開きましょう</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="759" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-2-1024x759.png" alt="" class="wp-image-1158" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-2-1024x759.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-2-300x223.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-2-768x570.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-2-1536x1139.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-2.png 2044w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>外の壁にもメニューがあります。どうやらお目当ての天丼は400円プラスすると、極上天丼（エビが4本プラス）になるみたいです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="759" height="1024" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-3-759x1024.png" alt="" class="wp-image-1159" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-3-759x1024.png 759w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-3-222x300.png 222w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-3-768x1036.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-3.png 1124w" sizes="auto, (max-width: 759px) 100vw, 759px" /></figure>



<p>着丼！</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="759" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-4-1024x759.png" alt="" class="wp-image-1160" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-4-1024x759.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-4-300x223.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-4-768x570.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-4-1536x1139.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-4.png 2044w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>アップも。ボリュームたっぷりです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="759" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-5-1024x759.png" alt="" class="wp-image-1161" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-5-1024x759.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-5-300x223.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-5-768x570.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-5-1536x1139.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-5.png 2044w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>えび2本、ピーマン、なす、さつまいも、蓮根、ちくわ、しめじ（舞茸じゃなくてしめじなの珍しいですね）などが載っていて、大満足の味でした！なお、タレは衣に絡ませてあるので、どこを食べてもタレの味がして美味しい！以前に、アーケードの天丼てんやがなくなって、仙台で天丼が食べたくなったらどこ行けばいいんやーって悲しい気持ちになったのですが、これからはさかえさんに行こうと思います。なお、店長さんのお名前がさかえさんなので、お店のなまえもそこから取ったんだろうなーって思ってます。</p>



<p>あと、帰り道で知ったのですが勾当台公園に地下道を通す工事をやっているみたいですね。どこまで伸びるか分からないですがフェスやイベントの際に、東と西が行き来しやすくなる配置だといいですね。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="759" height="1024" src="https://blog.fits-inc.jp/wp-content/uploads/2024/10/image-6-759x1024.png" alt="" class="wp-image-1162" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-6-759x1024.png 759w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-6-222x300.png 222w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-6-768x1036.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/10/image-6.png 1124w" sizes="auto, (max-width: 759px) 100vw, 759px" /></figure>



<p>店名：寿司・天ぷら・極上麦酒さかえ<br>場所：JAビル宮城の地下１階<br>訪問日：10/21（月）<br>頼んだもの：天丼大盛り1200円<br>定休日：日曜日</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Yappliのフォームの外部API連携について</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/06/21/yappli-lite-api/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Fri, 21 Jun 2024 07:47:53 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1147</guid>

					<description><![CDATA[こんにちは！FITSのアプリ開発WGです。今日はYappliのフォーム機能を使っていて気になった機能（外部API連携）について調べたことを記事にまとめています。Yappliはノーコードのアプリ開発プラットフォームで、弊社 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは！FITSのアプリ開発WGです。今日はYappliのフォーム機能を使っていて気になった機能（外部API連携）について調べたことを記事にまとめています。Yappliはノーコードのアプリ開発プラットフォームで、弊社では月額39,800のYappli Liteプランを契約しています。</p>



<p>最初に契約した時に手違いがあったのか、必要なチュートリアル資料などが送られてきておらず、公式のチュートリアルアプリを色々と確認しながら少しずつ機能の理解を深めていきました。その中で一番理解が難しかったのがフォーム機能に内包されている「外部API連携」です。</p>



<p>この外部API連携については全然情報が出て来ず、こちらで想定するSlack連携などを組み込んでも全く動作してくれませんでした。設定としては</p>



<p>・会員登録APIのエンドポイント（プレビューアプリ用）<br>・会員登録APIのエンドポイント（本番アプリ用）<br>・APIのリクエストパラメータへのマッピング</p>



<p>が存在するようです。試しに設定したエンドポイントに送られてくるデータをネットワークのログで確認したところ</p>



<pre class="wp-block-code"><code>parameters&#91;ud_id]=xxx&amp;parameters&#91;created_at]=2024-06-21 07:27:36&amp;parameters&#91;param1]=yyy&amp;parameters&#91;param2]=zzz</code></pre>



<p>というように、設定したパラメータが parameters[パラメータ名] =バリューのペアで入ったテキストを、URLエンコードしたものが入っているようでした。ただ、郵便番号や性別、生年月日などは含まれておりません（おそらくYappliのサーバーにだけ連携されているのかと）</p>



<p>最終的にどのように利用すればいいのかをサポートに確認したところ、Yappli Lite では外部API連携の設定はできるのだけど、プランの機能には含まれていない、とのことでした。Yappli が機能追加ごとの課金であることは知っていましたが、必要最低限のYappli LiteプランではAPI連携系の機能は一切使えない、とのことでした。Yappli Liteを使ってAPIサーバーとの連携を使ったアプリを作りたい、という場合は注意が必要そうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>php実行時にlibicuio.73.dylibphpの参照エラー</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/06/20/libicuio-73-dylibphp/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Thu, 20 Jun 2024 22:33:04 +0000</pubDate>
				<category><![CDATA[技術ブログ]]></category>
		<category><![CDATA[icu4c]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1144</guid>

					<description><![CDATA[先日、開発環境を立ち上げる際にphp実行時エラーに遭遇しました。 brew info で調べてみるとicu4cの74が入っていたようなので、Qiitaや他のテックサイトを参考に、gitからicu4cの73をbrew ta [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日、開発環境を立ち上げる際にphp実行時エラーに遭遇しました。</p>



<pre class="wp-block-code"><code>% php -v
dyld&#91;84774]: Library not loaded: @loader_path/../../../../opt/icu4c/lib/libicuio.73.dylib
Referenced from: &lt;90055B36-6315-3FD7-9F54-5F9D08D9F325> /opt/homebrew/Cellar/php@8.0/8.0.30/bin/php
Reason: tried: '/opt/homebrew/Cellar/php@8.0/8.0.30/bin/../../../../opt/icu4c/lib/libicuio.73.dylib' (no such file), '/usr/local/lib/libicuio.73.dylib' (no such file), '/usr/lib/libicuio.73.dylib' (no such file, not in dyld cache)
zsh: abort php -v

</code></pre>



<p>brew info で調べてみるとicu4cの74が入っていたようなので、Qiitaや他のテックサイトを参考に、gitからicu4cの73をbrew tapしてインストールする方法を試していたのですが、gitリポジトリでgit clone する際にicu4cのログがgit logで見つからず（おそらくパスが間違っていたのだと思うのですが）、最終的に下記の方法でlibicu4cの7.3をインストールしました。</p>



<pre class="wp-block-code"><code>wget https://raw.githubusercontent.com/Homebrew/homebrew-core/6aca0f221ee4ac0c25735dbf31cc01fed984d8f6/Formula/icu4c.rb<br>brew reinstall --formula icu4c.rb</code></pre>



<p>最終的にはphp8.0をバージョンアップすることで恒久対応を行ったのですが、取り急ぎphp8.0を使わなくてはいけない方でlibicu4cがバージョンアップされてしまって困っている方がいたら上記の方法で解決できる可能性があります。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lightsailで運用しているWordPressのPHPバージョンアップ作業</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/06/16/lightsail-wordpress-php-version-up-php8-2/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Sun, 16 Jun 2024 08:47:21 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1112</guid>

					<description><![CDATA[こんにちは、FITSのブログ担当です。本日はWordPressのために実施した、PHPのバージョンアップ作業について紹介しますね。なお今回のWordPressはLightsail上で運用されています。 まず、PHPのバー [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは、FITSのブログ担当です。本日はWordPressのために実施した、PHPのバージョンアップ作業について紹介しますね。なお今回のWordPressはLightsail上で運用されています。</p>



<p>まず、PHPのバージョンアップを行う必要性についてですが、PHPのバージョンを更新せずにWordPress を運用していると、ダッシュボードに「PHPの更新を推奨」というメッセージが表示されることがあります。PHPにもバージョンごとにサポート期間が設定されていますので、それが切れるとWordPress側で親切にも警告を表示してくれる、ということですね。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="790" height="382" src="https://blog.fits-inc.jp/wp-content/uploads/2024/06/image.png" alt="" class="wp-image-1113" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image.png 790w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-300x145.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-768x371.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>



<p>この「PHPの更新についてさらに詳しく」を見るとわかるのですが、WordPress自体にはPHPのバージョンアップをサポートする機能はなく、単純にバックアップを取った後に自身でPHPをバージョンアップさせることとなります。</p>



<p>ただ、過去の経験からLightsailにおけるPHPのアップデート作業は依存関係などで作業が複雑化することが多く、単純にLightsailに別なWordPressインスタンスを構築し、そこに対してバックアップデータを復帰するのが最も確実な対応方法となります。まずはLightsailのダッシュボードから新しいインスタンスを立ち上げていきます。その際に、WordPress用インスタンスイメージを選びましょう。また、立ち上げたら静的IPアドレスをアタッチしておくと良いです。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="641" src="https://blog.fits-inc.jp/wp-content/uploads/2024/06/image-1-1024x641.png" alt="" class="wp-image-1114" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-1-1024x641.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-1-300x188.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-1-768x481.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-1.png 1092w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>立ち上げインスタンスを確認すると、PHPのバージョンが新しくなっていることが分かります。※PHPのバージョンはbitnamiのWordPressイメージ次第のため、新しくはあるものの、最新のPHPバージョンではないことに注意してください。</p>



<pre class="wp-block-code"><code>bitnami@ip-xxx-xxx-xxx-xxx:~$ php -v
PHP 8.2.19 (cli) (built: May 7 2024 15:22:14) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.19, Copyright (c) Zend Technologies
with Zend OPcache v8.2.19, Copyright (c), by Zend Technologies
bitnami@ip-xxx-xxx-xxx-xxx:~$</code></pre>



<p>さらに、WordPressの認証情報を確認し、管理画面にもログイン可能であることを確認します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="449" src="https://blog.fits-inc.jp/wp-content/uploads/2024/06/image-2-1024x449.png" alt="" class="wp-image-1117" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-2-1024x449.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-2-300x131.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-2-768x336.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-2-1536x673.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-2.png 1895w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>今回の環境ではWordPressのファイル群は /opt/bitnami/apps/wordpressにまとまっていました。wp-content の中に以降に必要となる uploads、themes、pluginsなども存在しています</p>



<pre class="wp-block-code"><code>root@ip-xx-xx-xx-xx:/opt/bitnami/apps/wordpress/htdocs# ls
activate.html wp-activate.php wp-content wp-mail.php
index.php wp-admin wp-cron.php wp-settings.php
license.txt wp-blog-header.php wp-includes wp-signup.php
pairing.html wp-comments-post.php wp-links-opml.php wp-trackback.php
readme.html wp-config.php wp-load.php xmlrpc.php
robots.txt wp-config-sample.php wp-login.php

root@ip-xx-xx-xx-xx:/opt/bitnami/apps/wordpress/htdocs# ls wp-content/
cache      languages  themes   upgrade-temp-backup  w3tc-config
index.php  plugins    upgrade  uploads</code></pre>



<p>さらに、データベースのダンプデータ（バックアップデータ）も取得しておきます。</p>



<pre class="wp-block-code"><code>#mysqldump -u bn_wordpress -p bitnami_wordpress &gt; bitnami_wordpress.sql</code></pre>



<p>この後はバックアップデータを移行先の Lightsail インスタンスに格納する必要があります。SSHでCLIから接続しても良いのですが、今回Advanced File ManagerプラグインのFTP機能を使ってアップロードすることにします。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="480" src="http://54.150.137.162/wp-content/uploads/2024/06/image-3-1024x480.png" alt="" class="wp-image-1126" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-3-1024x480.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-3-300x141.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-3-768x360.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-3.png 1292w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>後は必要なファイルと、データベースの取り込みをすれば作業完了ですが「このサイトに重大なエラーがありました」が発生しました。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="250" src="http://54.150.137.162/wp-content/uploads/2024/06/image-4-1024x250.png" alt="" class="wp-image-1128" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-4-1024x250.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-4-300x73.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-4-768x187.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-4-1536x375.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/06/image-4.png 1582w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>wp-config.php のデバッグ設定をONにしてデバッグします</p>



<pre class="wp-block-code"><code>define( 'WP_DEBUG', true );

define( 'WP_DEBUG_DISPLAY', true);

define( 'WP_DEBUG_LOG', true );</code></pre>



<p>結果、今回は下記のエラーが発生していました<br><strong>Fatal error</strong>: Uncaught Error: Call to undefined function create_function()<br><strong>Fatal error</strong>: Array and string offset access syntax with curly braces is no longer supported<br>これらは、PHPのバージョンが上がって廃止になったものなので、create_functionを無名関数に置き換え、配列への波括弧によるアクセスを、角括弧に置き換えれば問題なく動きます（今回はテーマのファイルで発生していたため、少し発見が遅れました）</p>



<p>後はLet &#8216;s Encrypt を使ってSSL対応を行います。今回はbitnamiのイメージを使っているので、certbotではなくてbncertを使うことで恒久的なSSL対応が可能となります。<br>参考：AWS公式ドキュメント「Lightsail WordPress のインスタンスで HTTPS を有効にする」<br><a href="https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-enabling-https-on-wordpress.html">https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-enabling-https-on-wordpress.html</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Google Workspaceのグループメール閲覧権限問題とその対処法</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/05/24/google-workspace%e3%81%ae%e3%82%b0%e3%83%ab%e3%83%bc%e3%83%97%e3%83%a1%e3%83%bc%e3%83%ab%e9%96%b2%e8%a6%a7%e6%a8%a9%e9%99%90%e5%95%8f%e9%a1%8c%e3%81%a8%e3%81%9d%e3%81%ae%e5%af%be%e5%87%a6%e6%b3%95/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Fri, 24 May 2024 12:02:20 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1098</guid>

					<description><![CDATA[こんにちは！FITSの情報システムワーキンググループ（情シスWG）です。情報シスWGでは社内システムの運用や権限、ロールの確認をメインに活動しています。今回はその活動の中で見つけた運用の注意点を備忘録も兼ねて共有します！ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんにちは！FITSの情報システムワーキンググループ（情シスWG）です。<br>情報シスWGでは社内システムの運用や権限、ロールの確認をメインに活動しています。今回はその活動の中で見つけた運用の注意点を備忘録も兼ねて共有します！</p>



<p>FITSではGoogle Workspaceを利用しています。<br>あるとき、Googleグループのすべてのメールが閲覧できるという報告を受けました。<br>幸い、情報漏洩などの事故は起きていませんでしたが、今後に備えて原因の解明と対策を行いました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1022" height="513" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/google-group-1.png" alt="" class="wp-image-1102" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/google-group-1.png 1022w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/google-group-1-300x151.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/google-group-1-768x386.png 768w" sizes="auto, (max-width: 1022px) 100vw, 1022px" /></figure>



<h2 class="wp-block-heading">原因の特定</h2>



<p>原因はGoogle Workspaceの管理者ロール設定にありました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1022" height="541" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/role編集後.png" alt="" class="wp-image-1103" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/role編集後.png 1022w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/role編集後-300x159.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/role編集後-768x407.png 768w" sizes="auto, (max-width: 1022px) 100vw, 1022px" /></figure>



<p>以下のロールが割り当てられたメンバーは、グループ側の設定で閲覧制限をかけていても適用されずに閲覧が可能です。<br>・特権管理者<br>・グループ管理者<br>閲覧できる旨の報告をしてくれた方は、グループ作成業務の際にグループ管理者ロールを割り当てられていたため、意図せず全てのメールが閲覧できる状態でした。</p>



<h2 class="wp-block-heading">対策</h2>



<p>グループの閲覧権限は必要のない権限であったため、ロール権限からグループの閲覧権限を外すことを試みましたが、特権管理者ロールやグループ管理者ロールはプリセットなロールであり、権限の変更はできませんでした。</p>



<p>そのため、グループの閲覧以外の権限を同等にした管理者ロールを手動で作成し、そちらに現在のメンバーを移行することで対応しました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="912" height="799" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/Groups-Administrator-fixed.png" alt="" class="wp-image-1104" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/Groups-Administrator-fixed.png 912w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/Groups-Administrator-fixed-300x263.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/Groups-Administrator-fixed-768x673.png 768w" sizes="auto, (max-width: 912px) 100vw, 912px" /></figure>



<h2 class="wp-block-heading">注意点</h2>



<p>この対応を行う際には以下の点に注意が必要です。</p>



<p>特権管理者ロールは特殊なロール（スーパーアドミン）であり、権限設定画面に明記されていない権限と紐づいています。<br>つまり、権限を手動で同等に作成したつもりでも、今まで出来ていた操作ができなくなることがあります。<br>例えば、Google WorkspaceとAWSのIAMを統合してSSOを利用する場合、特権管理者ロールを持っていないとそれらの設定や操作ができません。</p>



<p><a>&#8211; 参考リンク: Configure SAML and SCIM with Google Workspace and IAM Identity Center &#8211;</a></p>



<h2 class="wp-block-heading">その他の対応方法</h2>



<p>私が行った方法以外にも、以下のような対応方法が考えられます。<br><br>・管理者の権限の見直し<br>不必要に管理者権限を持っているメンバーがいないか確認し、権限を持つ人数を最小限に抑えること。管理者権限を持つ必要があるか確認を行い、必要のないメンバーからはその権限を削除する。<br><br>・情報の機密性の評価<br>共有される情報の機密性を評価し、Googleグループ内で共有すべきでない機密性の高い情報は、もっとセキュアな方法（例えば、エンドツーエンド暗号化を提供するプラットフォーム）で共有することを検討する。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>組織でGoogle Workspaceを運用する場合、管理者権限は情シスなど一部のメンバーに限定しプロジェクトメンバーには権限のサブセットをロール化するのが基本となります。<br>もし管理者権限を運用されているのであれば、不要な権限を与えてしまっていないかと、<br>別途ロールを発行することが可能か検討するのが良いかもしれません。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>きゅむろんが公開されました</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/05/22/%e3%81%8d%e3%82%85%e3%82%80%e3%82%8d%e3%82%93%e3%81%8c%e5%85%ac%e9%96%8b%e3%81%95%e3%82%8c%e3%81%be%e3%81%97%e3%81%9f/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Wed, 22 May 2024 05:34:11 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1091</guid>

					<description><![CDATA[弊社にて開発協力している最新気象レーダーMP-PAWRのデータ配信プラットフォーム 「きゅむろん」（ベータ版）のサイトが公開されました。高性能なMP-PAWRのデータを3D表示に時間軸を加えた4Dで表示することが可能な画 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>弊社にて開発協力している最新気象レーダーMP-PAWRのデータ配信プラットフォーム 「きゅむろん」（ベータ版）のサイトが公開されました。高性能なMP-PAWRのデータを3D表示に時間軸を加えた4Dで表示することが可能な画期的なシステムとなっております。詳しくは株式会社Preferred Networks様のサイトで ニュースリリースをご覧いただけます。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-preferred-networks wp-block-embed-preferred-networks"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="KQ88G7uIda"><a href="https://www.preferred.jp/ja/news/pr20240522/">最新気象レーダーMP-PAWRのデータ配信プラットフォーム 「きゅむろん」（ベータ版）を公開</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;最新気象レーダーMP-PAWRのデータ配信プラットフォーム 「きゅむろん」（ベータ版）を公開&#8221; &#8212; Preferred Networks" src="https://www.preferred.jp/ja/news/pr20240522/embed/#?secret=KQ88G7uIda" data-secret="KQ88G7uIda" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>laravel11でlaravel-adminがエラーになる話</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2024/05/16/laravel-admin%e3%81%a7isdoctrineavailable%e3%81%8cerror/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Thu, 16 May 2024 02:35:31 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1080</guid>

					<description><![CDATA[みなさんこんにちは！本日はlaravelの最新バージョンであるlaravel11にlaravel-adminを入れて運用できるかどうかを確認した時のお話をします。 結論から言うと「laravel-admin自体は動くけど [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>みなさんこんにちは！本日はlaravelの最新バージョンであるlaravel11にlaravel-adminを入れて運用できるかどうかを確認した時のお話をします。</p>



<p>結論から言うと「laravel-admin自体は動くけどartisan adminの一部のコマンドが動かない」という状況になります。laravel11ではこちらのリンクにあるようにDoctrine DBALの依存関係がなくなっています。</p>



<p><a href="https://laravel.com/docs/11.x/upgrade#doctrine-dbal-removal">https://laravel.com/docs/11.x/upgrade#doctrine-dbal-removal</a></p>



<p>なのでlaravel-adminを使いたい場合は、laravel10の導入が選択肢となりそうです。</p>



<h2 class="wp-block-heading">laravel11とlaravel-adminの導入</h2>



<p>laravel11導入とlaravel-adminのインストールを順を追って説明すると、まずは公式の</p>



<p><a href="https://readouble.com/laravel/11.x/ja/installation.html">https://readouble.com/laravel/11.x/ja/installation.html</a></p>



<p>にあるインストールコマンド（下記はMacOSの場合）</p>



<pre class="wp-block-code"><code>curl -s "https://laravel.build/laravel11" | bash</code></pre>



<p>でlaravel11をインストールします（URLの末尾はアプリのディレクトリとなる）。インストールが終わったらコンテナを起動しましょう</p>



<pre class="wp-block-code"><code>cd laravel11
./vendor/bin/sail up</code></pre>



<p>コンテナが起動したら</p>



<pre class="wp-block-code"><code>./vendor/bin/sail artisan migrate</code></pre>



<p>これだけでlaravel11はインストール完了です。とっても簡単ですね。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/image-1024x635.png" alt="" class="wp-image-1082" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1024x635.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-300x186.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-768x477.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1536x953.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-2048x1271.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>次に、laravel-adminを導入していきます。</p>



<pre class="wp-block-code"><code>./vendor/bin/sail composer require encore/laravel-admin
./vendor/bin/sail artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
./vendor/bin/sail artisan admin:install</code></pre>



<p>こちらもとっても簡単ですね。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="600" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/image-1-1024x600.png" alt="" class="wp-image-1085" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1-1024x600.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1-300x176.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1-768x450.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1-1536x900.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-1-2048x1200.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>次に、モデル用のコントローラーを生成するためにいつものコマンドを叩いたところエラーが発生。</p>



<pre class="wp-block-code"><code>./vendor/bin/sail artisan admin:make UserController --model=App\\Models\\User</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="479" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/image-2-1024x479.png" alt="" class="wp-image-1087" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-2-1024x479.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-2-300x140.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-2-768x359.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-2.png 1428w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code>   BadMethodCallException 

  Method Illuminate\Database\MySqlConnection::isDoctrineAvailable does not exist.

  at vendor/laravel/framework/src/Illuminate/Macroable/Traits/Macroable.php:112
      108▕      */
      109▕     public function __call($method, $parameters)
      110▕     {
      111▕         if (! static::hasMacro($method)) {
  ➜ 112▕             throw new BadMethodCallException(sprintf(
      113▕                 'Method %s::%s does not exist.', static::class, $method
      114▕             ));
      115▕         }
      116▕ 

  i   Bad Method Call: Did you mean Illuminate\Database\MySqlConnection::availableAt() ? </code></pre>



<p>んん？なんでしょうこれは。と思って調べるとバッチリ「Laravel11ではDoctrine DBAL関連のメソッドが削除された」と出てきますね。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="715" src="https://blog.fits-inc.jp/wp-content/uploads/2024/05/image-3-1024x715.png" alt="" class="wp-image-1088" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-3-1024x715.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-3-300x209.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-3-768x536.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-3-1536x1072.png 1536w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2024/05/image-3.png 1544w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>代替としてSchema::xxxを使えとあるのですが、現時点ではlaravel-adminがこれに対応するかどうか不明ですので、一旦laravel11とlaravel-adminの組み合わせは選択肢から外すのが良さそうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>laravel-admin でページを追加する基本手順</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2023/10/23/laravel-admin-add-administartion-page/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 13:54:39 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1062</guid>

					<description><![CDATA[laravel-admin で管理ページを追加するための手順です。今回は、本を扱うBookデータ構造を追加します。artisan の make:model コマンドにマイグレーションのオプションをつけて実行します。 マイ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>laravel-admin で管理ページを追加するための手順です。今回は、本を扱うBookデータ構造を追加します。artisan の make:model コマンドにマイグレーションのオプションをつけて実行します。</p>



<pre class="wp-block-code"><code>php artisan make:model Book --migration</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="755" height="79" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-4.png" alt="" class="wp-image-1063" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-4.png 755w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-4-300x31.png 300w" sizes="auto, (max-width: 755px) 100vw, 755px" /></figure>



<p>マイグレーションファイルを適当に編集して書籍が持っていそうなプロパティを追加しましょう。</p>



<pre class="wp-block-code"><code>return new class extends Migration
{
    /**
    * Run the migrations.
    */
    public function up(): void
    {
        Schema::create('books', function (Blueprint $table) {
            $table-&gt;id();
            $table-&gt;string('title');
            $table-&gt;string('author');
            $table-&gt;string('isbn');
            $table-&gt;integer('price');
            $table-&gt;timestamps();
        });
    }
    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('books');
    }
    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('books');
    }
};</code></pre>



<p>マイグレーションを適用します</p>



<pre class="wp-block-code"><code>php artisan migrate</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="900" height="75" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-5.png" alt="" class="wp-image-1066" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-5.png 900w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-5-300x25.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-5-768x64.png 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure>



<p>さらに laravel-admin 用にルーティングとコントローラーを設定します。</p>



<pre class="wp-block-code"><code>php artisan admin:make BookController --model=App\\Models\\Book</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="803" height="123" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-7.png" alt="" class="wp-image-1068" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-7.png 803w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-7-300x46.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-7-768x118.png 768w" sizes="auto, (max-width: 803px) 100vw, 803px" /></figure>



<p>実行結果で親切にも $router->resource(&#8216;books&#8217;, BookController::class); をapp/Admin/routes.php に追加しろ、と教えてくれているのでその通り対応します。これで http://localhost/admin/books で管理画面が表示できるようになりました。</p>



<p><img decoding="async" src="data:image/png;base64,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IECAAAECEyew4bh7dMkll4y7iPkJECBAgAABAgQIECBAgAABAnMSGDtxsdlmm81pRRYiQIAAAQIECBAgQIAAAQIECETg0ssvGhlCV5GRqcxIgAABAgQIECBAgAABAgQILLSAxMVCi1sfAQIECBAgQIAAAQIECBAgMLKAxMXIVGYkQIAAAQIECBAgQIAAAQIEFlpA4mKhxa2PAAECBAgQIECAAAECBAgQGFlA4mJkKjMSIECAAAECBAgQIECAAAECCy0gcbHQ4tZHgAABAgQIECBAgAABAgQIjCwgcTEylRkJECBAgAABAgQIECBAgACBhRaQuFhocesjQIAAAQIECBAgQIAAAQIERhaQuBiZyowECBAgQIAAAQIECBAgsL4IXH311evLrs57P2tbbTjvLRSAAAECBAgQIECAAAECBAYKnHzyyc0Pf/jD5vLLLx84z2KesHTp0mb58uXNXnvttZh3Y7VtX7lyZXu8LrvsstVeL/nHc477Zclws8Z657PuOOs8c51hk002afI+WLZs2VxDDF1O4mIoj4kECBAgQIAAAQIECBCYu0CSFldeeWXz0pe+tNl0003nHmgdXvLSSy9tTjnllCb7OgnJiyQtrrjiiuZGN7pRc61r1eyksLCJi2233bbau2jVqlXNihUrmtjVSF7UPArVUAQmQIAAAQIECBAgQIDAYhBIS4uHPOQhE5u0yDFIQib7mH1d7CVdHtIyZquttqqctFjsUqtv/wYbbNDc8IY3bO1qdBuRuFjd218ECBAgQIAAAQIECBAoJpBK8KS2tOhFyj5OQleYJUuWNOkekoq4Mp5AWqfELoali8RFadF1MN5VV13V/POf/1wHt8wmESBAgAABAgQIECBAgACB4QLVExcXX3xx22Tol7/8ZdtPqNucb3zjG83+++/f/Vnl5wUXXNC8+c1vbv71r39Vib8Ygn7ve99rHvOYxzRPf/rTmwsvvHCd3OR3v/vdzdlnn71ObpuNIkCAAAECBAgQIECAAIG1K1B1cM4f//jHzYtf/OLmVre6VbuXf/3rX5vXv/71zZ3vfOcmrQD+85//VN37DKhy3nnntYPhlFxREiKnnnpq87Wvfa254x3v2Oy33359wyc5k0FKdtttt77Th73473//u034fO5zn2sTPkcfffSw2QdOO+GEE9qkxcMf/vA15hl1P9ZYcIwXMgjRYYcdNrC5UPo//f3vf28uueSSMaKalQABAgQIECBAgAABAgTWF4GqiYu0dth3332bxz72sa3nr3/96+a6173ugtlmFNgjjjii+Poe/OAHN92AIxtvvPHA+GeeeWZz7Wtfe+D0YROS8DnttNPaWfJYmbmWbMPee+/dd/FR96PvwiO8mP5NX/3qV9vExaDZ0//p1a9+9aDJXidAgAABAgQIECBAgACB9VygaleRPBZns802mya+7W1v24402r2w4YYbNieeeGKb2HjWs5612ii06d7x2te+ttl9992bxz3ucc0XvvCFdrFUhp/ylKe0j1nJC2k18KQnPan57W9/205PS45nPvOZbbeIjOuQaWl5kZJkwM9+9rPmoIMOake9TSuGtGzoSirZ6Vbx0Ic+tF0uy372s5/tJk//fPvb397ss88+03/3++V973tfu2+f+MQn2ljdCLtphfHEJz6xeeADH9i87GUvax8Z02/5tOI4/PDD+01a7bW06PjgBz/YPnboYQ97WHPMMcdM7+9rXvOa5vzzz28TA3l9ZhllP7JMjkVi7bHHHu22d/sS3xe+8IXNT37ykybH71GPelS7z1kmrSi6lihPfvKT28c/5fUPfehDbWuVtMKIQY5njsvPf/7zTG5LjJ7whCe068t83TH6y1/+0nYvyojF6fqSFj0KAQIECBAgQIAAAQIECEy2QNXERSqz6Rry1re+tfnjH/+4huQZZ5zRjjx77LHHNve5z32ad77zndPzvOpVr2o22WSTJl0l3vjGNzbvfe97m29+85vta2mB8NOf/rSdN5XXVH5PP/309u/f/OY3bUV7yy23bLtpnHXWWW23lEz8/e9/3xx11FFt0iHrTAU525CSSvHBBx/cjolx0kkntQmWVMT33HPPdnrvf/e85z2b29/+9r0vrfF7ki3Lly9v0kUjCZI73elObdLkDW94Q5N9+9KXvtTkOboHHnhgu50zA2y//fbt8jNfn/n3Rz/60eZb3/pW84EPfKD5+Mc/3mT/O8cXvOAFTRwOOOCA5qlPferMRZtR9iMLZXtvcYtbNF/84hfbJEMSLklmJGmSMTSSVDr00EObl7/85e2xSrePG9zgBs2LXvSidp0xf8lLXtL+nmf7phXMDjvs0HzmM59pj2eOS5JcKUlgvO1tb2ve8pa3NJ/85CfbY/uRj3yknZaxMHbaaafW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QIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQkLgooSgGAQIECBAgQIAAAQIECBAgUEVA4qIKq6AECBAgQIAAAQIECBAgQIBACQGJixKKYhAgQIAAAQIECBAgQIAAAQJVBCQuqrAKSoAAAQIECBAgQIAAAQIECJQQ+P/Igr1zID/QUAAAAABJRU5ErkJggg==" alt=""></p>



<p>せっかくなのでメニューにも追加しましょう。メニューテーブルの seeder を書いても良いのですが、せっかくデフォルトのままlaravel-adminを使っているので、最初から搭載されてるメニューのマスメン機能を使ってページを追加しましょう。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="835" height="492" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-6.png" alt="" class="wp-image-1067" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-6.png 835w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-6-300x177.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-6-768x453.png 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>



<p>Bookデータの管理画面に遷移するためのメニューが追加されました</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="462" height="598" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-9.png" alt="" class="wp-image-1071" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-9.png 462w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-9-232x300.png 232w" sizes="auto, (max-width: 462px) 100vw, 462px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>laravel-admin でヘッダーにアイコンを追加する</title>
		<link>http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/2023/10/18/laravel-admin-add-header-icon/</link>
		
		<dc:creator><![CDATA[FITS Admin]]></dc:creator>
		<pubDate>Wed, 18 Oct 2023 13:39:18 +0000</pubDate>
				<category><![CDATA[ブログ]]></category>
		<guid isPermaLink="false">https://blog.fits-inc.jp/?p=1052</guid>

					<description><![CDATA[laravel-admin の issue をみていたら、ヘッダー（ユーザーアイコンやリフレッシュボタンが表示されている領域）にアイコンを追加する方法についての質問が投稿されていました。興味があって調べてみたのでその調査 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>laravel-admin の issue をみていたら、ヘッダー（ユーザーアイコンやリフレッシュボタンが表示されている領域）にアイコンを追加する方法についての質問が投稿されていました。興味があって調べてみたのでその調査メモを残してきます。</p>



<p>まずヘッダー部分のテンプレートは vendor/encore/laravel-admin/resources/views/partials/header.blade.php に存在しますけど、ヘッダーからリフレッシュボタンなどのナビゲーションボタンを読み込む箇所は</p>



<pre class="wp-block-code"><code>    &lt;!-- Navbar Right Menu --&gt;
    &lt;div class="navbar-custom-menu"&gt;
        &lt;ul class="nav navbar-nav"&gt;
            {!! Admin::getNavbar()-&gt;render() !!}</code></pre>



<p>という記載になっていました。Admin::getNavbar() を確認する必要がありますね。vendor/encore/laravel-admin/src/Admin.php の実装を確認すると、</p>



<pre class="wp-block-code"><code>/**
 * Get navbar object.
 *
 * @return \Encore\Admin\Widgets\Navbar
 */
public function getNavbar()
{
    if (is_null($this-&gt;navbar)) {
        $this-&gt;navbar = new Navbar();
    }

    return $this-&gt;navbar;
}</code></pre>



<p>とあるので Encore\Admin\Widgets\Navbar の実装を確認します。vendor/encore/laravel-admin/src/Widgets/Navbar.php を確認すると、 left()、right()、add() というメソッドでナビゲーションバーに独自の element を追加できることがわかりました。</p>



<pre class="wp-block-code"><code>/**
 * @param $element
 *
 * @return $this
 */
public function right($element)
{
    $this-&gt;elements&#91;'right']-&gt;push($element);

    return $this;
}</code></pre>



<p>例えば vendor/encore/laravel-admin/resources/views/partials/header.blade.php 直接編集し、下記のように書き換えることでメールアイコンを表示することができました。</p>



<pre class="wp-block-code"><code>    &lt;!-- Navbar Right Menu --&gt;
    &lt;div class="navbar-custom-menu"&gt;
        &lt;ul class="nav navbar-nav"&gt;

            &lt;?php
            Admin::getNavbar()-&gt;right('&lt;li&gt;&lt;a&gt;&lt;i class="fa fa-envelope"&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;');
            ?&gt;</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="268" src="https://blog.fits-inc.jp/wp-content/uploads/2023/10/image-3-1024x268.png" alt="" class="wp-image-1056" srcset="http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-3-1024x268.png 1024w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-3-300x79.png 300w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-3-768x201.png 768w, http://ec2-54-150-137-162.ap-northeast-1.compute.amazonaws.com/wp-content/uploads/2023/10/image-3.png 1030w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>もし、リフレッシュボタンのようにコンポーネント化した上でボタンを追加するのであれば vendor/encore/laravel-admin/resources/views/components/refresh-btn.blade.php を参考にテンプレートや、SCRIPTタグで動作を設定することになります。またこれらの修正は vendor 以下のファイルを直接編集するのではなく、テンプレートをプロジェクトディレクトリにコピーした上で行う必要があります。</p>



<p><a href="javascript:void(0);"></a></p>



<p><a href="javascript:void(0);"></a></p>



<p><a href="javascript:void(0);"></a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
