<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>個人開発 | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/development/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Sun, 20 Oct 2024 23:34:29 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>個人開発 | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>個人開発で導入するのにおすすめの監視ツール</title>
		<link>https://mintaku-blog.net/monitoring-tools/</link>
					<comments>https://mintaku-blog.net/monitoring-tools/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 23:34:51 +0000</pubDate>
				<category><![CDATA[個人開発]]></category>
		<category><![CDATA[その他]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2537</guid>

					<description><![CDATA[<p>個人開発プロジェクトにおいて、監視ツールの導入はサービスの信頼性とユーザーエクスペリエンスを向上させるためにも導入しておくに越したことはないかと思います。  …</p>
The post <a href="https://mintaku-blog.net/monitoring-tools/">個人開発で導入するのにおすすめの監視ツール</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>個人開発プロジェクトにおいて、監視ツールの導入はサービスの信頼性とユーザーエクスペリエンスを向上させるためにも導入しておくに越したことはないかと思います。</p>
<p>適切な監視ツールを選ぶことで、システムの稼働状況をリアルタイムで把握し、問題が発生した際に迅速に対応することが可能になります。</p>
<p>本記事では、個人開発者にとって導入が簡単で、無料で利用できる監視ツールを3つ紹介し、その選び方や実際の使用感について紹介します。</p>
<h2>個人開発で導入する監視ツールの選び方</h2>
<p>個人開発で導入する監視ツールを選ぶ際のポイントは、まず簡単に導入できることがポイントかなと思います。</p>
<p>開発リソースを効率的に活用するため、設定が直感的で短時間で完了するツールが理想的です。</p>
<p>また、無料プランが利用可能なツールを選ぶことで、コストを抑えつつ必要な監視機能を確保できます。</p>
<p>具体的な監視ニーズに応じて、稼働状況やエラーをリアルタイムで監視できるツールや、ウェブサイトのパフォーマンスを監視できるツールを選ぶのもありだと思います。</p>
<p>&nbsp;</p>
<h2>個人開発で導入するのにおすすめの監視ツール3選</h2>
<h3>1. UptimeRobot</h3>
<p><img data-attachment-id="2543" data-permalink="https://mintaku-blog.net/monitoring-tools/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2024-10-21-8-27-06/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?fit=2560%2C1327&amp;ssl=1" data-orig-size="2560,1327" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2024-10-21 8.27.06" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?fit=300%2C156&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?fit=800%2C415&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304.jpg?resize=300%2C156&#038;ssl=1" alt="" width="300" height="156" class="alignnone size-medium wp-image-2543" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?resize=300%2C156&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?resize=1024%2C531&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?resize=768%2C398&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?resize=1536%2C796&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?resize=2048%2C1062&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/daeb48c658d3690e7e3deb8f2ea7d304-scaled.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></p>
<h4>特徴</h4>
<p>ウェブサイトやサービスの稼働状況を監視し、ダウンタイムが発生するとアラートを送信します。</p>
<p>UptimeRobotは、HTTP(S)、Ping、ポート、キーワードのモニタリングをサポートしており、幅広い監視ニーズに対応しています。</p>
<h4>利点</h4>
<p>設定が非常に簡単で、初心者でも短時間で監視を開始できます。アラートはメール、SMS、Slackなどで受け取ることができ、即座に問題を把握できます。</p>
<p>さらに、ダッシュボードが直感的で見やすいため、監視結果を迅速に確認できます。</p>
<h4>無料プラン</h4>
<p>無料プランでは、50のモニタリング対象を5分間隔で監視可能です。</p>
<p>個人開発プロジェクトには十分な範囲で利用でき、基本的な監視機能をカバーしています。</p>
<p>公式サイト:</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/uptimerobot.com/assets/images/ogimage.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://uptimerobot.com/">UptimeRobot: Free Website Monitoring Service</a>
			</p>
							<div class="ys-blog-card__dscr">
					Start monitoring in 30 seconds. Use adva&hellip;				</div>
										<div class="ys-blog-card__domain">uptimerobot.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h3>2. Sentry</h3>
<p><img data-attachment-id="2544" data-permalink="https://mintaku-blog.net/monitoring-tools/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2024-10-21-8-26-49/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?fit=2560%2C1029&amp;ssl=1" data-orig-size="2560,1029" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2024-10-21 8.26.49" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?fit=300%2C121&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?fit=800%2C321&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18.jpg?resize=300%2C121&#038;ssl=1" alt="" width="300" height="121" class="alignnone size-medium wp-image-2544" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?resize=300%2C121&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?resize=1024%2C411&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?resize=768%2C309&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?resize=1536%2C617&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?resize=2048%2C823&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ce42469337cd2ed5b9ece6c810517c18-scaled.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></p>
<h4>特徴</h4>
<p>アプリケーションのエラートラッキングとパフォーマンスモニタリングを提供します。</p>
<p>エラーの発生場所、頻度、影響範囲をリアルタイムで把握でき、パフォーマンスの問題を素早く特定します。</p>
<p>多くのプログラミング言語やフレームワークに対応しており、幅広い開発環境で利用可能です。</p>
<h4>利点</h4>
<p>エラーをリアルタイムで検出し、詳細なスタックトレースとコンテキスト情報を提供するため、問題の原因を迅速に特定できます。</p>
<p>開発者フレンドリーなインターフェースを持ち、エラーの管理が簡単です。また、Sentryはパフォーマンスモニタリング機能も備えており、アプリケーションの応答時間やトランザクションの速度を詳細に分析できます。</p>
<h4>無料プラン</h4>
<p>一定のエラー数まで無料で利用可能で、小規模なプロジェクトや個人開発に最適です。</p>
<p>公式サイト:</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/images.ctfassets.net/em6l9zw4tzag/2QpkRfXBKS60Cq50REtPDL/95208c9546303aed0e6630fd63227a0a/home-hero-meta.webp?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://sentry.io/welcome/">Application Performance Monitoring &amp; Error Tracking Software</a>
			</p>
							<div class="ys-blog-card__dscr">
					Application performance monitoring for d&hellip;				</div>
										<div class="ys-blog-card__domain">sentry.io</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h3>3. StatusCake</h3>
<p><img data-attachment-id="2545" data-permalink="https://mintaku-blog.net/monitoring-tools/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2024-10-21-8-26-33/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?fit=2560%2C1318&amp;ssl=1" data-orig-size="2560,1318" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2024-10-21 8.26.33" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?fit=300%2C154&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?fit=800%2C412&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01.jpg?resize=300%2C154&#038;ssl=1" alt="" width="300" height="154" class="alignnone size-medium wp-image-2545" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?resize=300%2C154&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?resize=1024%2C527&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?resize=768%2C395&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?resize=1536%2C791&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?resize=2048%2C1055&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/ddc19b0f9d3b7b9cada80659515acd01-scaled.jpg?w=2400&amp;ssl=1 2400w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></p>
<h4>特徴</h4>
<p>ウェブサイトの稼働監視、SSL監視、ページ速度監視などを提供します。</p>
<p>監視対象はHTTP(S)やPing、TCPポートの他に、特定のキーワードの存在やレスポンスタイムもチェック可能です。</p>
<h4>利点</h4>
<p>設定が非常に簡単で、数分で監視を開始できます。アラート機能が豊富で、メール、SMS、電話、Slackなど様々な方法で通知を受け取ることができます。</p>
<p>世界中のロケーションからの監視が可能で、ユーザーの実際の使用感を反映した監視が行えます。また、詳細なレポート機能があり、稼働状況やパフォーマンスの変化を分析しやすくなっています。</p>
<h4>無料プラン</h4>
<p>基本的な監視機能を提供し、個人プロジェクトや小規模なサイトに十分対応できます。</p>
<p>無料プランでも主要な監視機能を利用でき、初期コストを抑えつつ監視を行うことができます。</p>
<p>公式サイト:</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/www.statuscake.com/wp-content/uploads/2024/07/cs-og-img.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://www.statuscake.com/">StatusCake - Uptime monitoring, Page speed monitoring, and more</a>
			</p>
							<div class="ys-blog-card__dscr">
					Website Monitoring solution that drives &hellip;				</div>
										<div class="ys-blog-card__domain">www.statuscake.com</div>
					</div>
	</div>
</div>

<h2>実際にStatusCakeを導入してみた</h2>
<p>今回、いくつかの監視ツールを触ってみて、StatusCakeが一番サクッと設定ができたのでこちらを導入しました。</p>
<p>複雑な設定や知識が不要で、数分で監視を開始できました。</p>
<p>ウェブサイトの稼働監視では世界中のサーバからのチェックが可能で、サービスのグローバルな可用性を確認できます。</p>
<p>メール、SMS、Slackなど多様な方法でアラートを受け取ることができ、問題発生時に迅速に対応できそうです。</p>
<p>また、無料プランの提供もあり、個人開発者にとってコストは重要な要素であり、StatusCakeは無料で基本的な監視機能を利用できるため、予算を気にすることなく導入できます。</p>
<p>無料プランでも10のモニタリング対象を5分間隔で監視できるため、一般的な個人開発のプロジェクトでは十分に対応できそうです。</p>
<p>通知を設定し、実際に監視対象のページが落ちると以下のようなメールが届きます。</p>
<p><img data-attachment-id="2546" data-permalink="https://mintaku-blog.net/monitoring-tools/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2024-10-21-8-26-05/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?fit=1838%2C1590&amp;ssl=1" data-orig-size="1838,1590" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2024-10-21 8.26.05" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?fit=300%2C260&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?fit=800%2C692&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?resize=300%2C260&#038;ssl=1" alt="" width="300" height="260" class="alignnone size-medium wp-image-2546" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?resize=300%2C260&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?resize=1024%2C886&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?resize=768%2C664&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?resize=1536%2C1329&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?w=1838&amp;ssl=1 1838w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2024/10/e1eff1a27c1c0b798ea85e681fb6595a.jpg?w=1600&amp;ssl=1 1600w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h2>おわりに</h2>
<p>今回紹介した3つの監視ツールは、いずれも設定が簡単で、個人開発者にとって扱いやすいものかと思います。</p>
<p>特にStatusCakeは、簡単なセットアップと多機能な監視オプションで優れたパフォーマンスを発揮します。</p>
<p>無料プランを利用することで、初期コストを抑えつつ、効果的な監視を行うことができますので、ぜひこれらのツールを活用してみてください！</p>The post <a href="https://mintaku-blog.net/monitoring-tools/">個人開発で導入するのにおすすめの監視ツール</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/monitoring-tools/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2537</post-id>	</item>
		<item>
		<title>個人開発で一部DBとして使用しているContentfulをSupabaseに移行した</title>
		<link>https://mintaku-blog.net/transfer-supabase/</link>
					<comments>https://mintaku-blog.net/transfer-supabase/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 11 Apr 2024 03:19:52 +0000</pubDate>
				<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2462</guid>

					<description><![CDATA[<p>個人開発で運営しているWebサービスの一部DBとして使用しているContentfulをSupabaseに移行した話をまとめました。 個人開発のWebサービス …</p>
The post <a href="https://mintaku-blog.net/transfer-supabase/">個人開発で一部DBとして使用しているContentfulをSupabaseに移行した</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>個人開発で運営しているWebサービスの一部DBとして使用しているContentfulをSupabaseに移行した話をまとめました。</p>
<h2>個人開発のWebサービスをContentfulからSupabaseに移行した経緯</h2>
<h3>無料枠を超えそう</h3>
<p>Contentfulの無料枠で使用しているのですが、無料枠だとレコード数が1万件となっており、徐々に上限に近づいていました。このままだと半年後くらいに上限にいきそうだったので、移行することにしました。</p>
<p>ちなみに有料プランも考えたのですが、1ヶ月300ドルと高いのとレコード数の上限が5万件といずれまた上限に達する時がきてしまうのと思ったのでやめました。</p>
<h3>ContentfulのAPI経由での取得なので検索性がちょっと悪い</h3>
<p>Contentfulからのデータを取得する際にAPI経由で取得するのですが、Contentfulが指定した条件で取得するため、若干使いづらいところがありました。</p>
<p>具体的に全文検索でmatchを使うのですが、データによってはヒットするはずなのに引っかからなかったりしていました。今後、Webサービスの検索性を高めるためにも移行しておきたかったです。</p>
<h3>Webサービスの変化</h3>
<p>今後WebサービスとしてCGM要素が追加されることもあり、ContentfulのAPIにGETだけでなくPOSTやUPDATEのリクエストを頻繁に行われることになります。</p>
<p>初期の頃の静的なコンテンツメインの情報サイトからCGMサービスとして変化していく中で、今後もContentfulを使っていくことに違和感を感じ、ちゃんと自前でDBを用意してあげる方が今後の保守性や拡張性においても良いのではないかと思いました。</p>
<p>&nbsp;</p>
<h2>Supabaseにした理由</h2>
<p>Contentfulを使っていたことからサーバレスのアプリケーション構造になっており、その構造でも導入できるSupabaseを選択しました。</p>
<p>またSupabaseにした理由として、RDBが使いたかったのとライブラリが用意され触った感じ使いやすかったためです。SupabaseのDBはPostgreSQLを使用しており、ライブラリのドキュメントも充実していました。</p>
<h2>ContentfulからSupabaseに移行するまでにしたこと</h2>
<h3>Supabaseで開発環境と本番環境を用意</h3>
<p>まずSupabaseで開発環境と本番環境を構築しました。アカウント登録してプロジェクト作成しました。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/supabase.com/images/og/supabase-og.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://supabase.com/">OpenAI logo</a>
			</p>
							<div class="ys-blog-card__dscr">
					Build production-grade applications with&hellip;				</div>
										<div class="ys-blog-card__domain">supabase.com</div>
					</div>
	</div>
</div>

<h3>Supabase用のディレクトリを用意</h3>
<p>次にWebアプリケーション内のソースコードを新しくSupabaseの接続用に作成しました。</p>
<p>Supabase用のDriverを用意して、ローカル環境で向き先をSupabaseにして実装をしました。</p>
<h3>ContentfulからSupabaseへデータ移行</h3>
<p>ContentfulにあるデータをSupabaseのDBに移行しました。ContentfulからデータをGETしてSupabaseのDBにINSERTするスクリプトを書いて、そのスクリプトを実行することでデータ移行しました。</p>
<h3>検証環境で確認</h3>
<p>ローカル環境での開発が終わったら、実際に検証環境にあげて本番環境と同じ動作になるかを検証しました。</p>
<h3>本番環境の向き先をSupabaseへ移行</h3>
<p>検証環境の動作確認を終えて、問題ないことを確認した後、本番環境への移行作業を行いました。</p>
<h2>実際にSupabaseに移行してみて</h2>
<h3>バグが発生した</h3>
<p>やはり人力の動作確認やテストだとどうしても抜け漏れがあり、本番移行後に気づいたバグがいくつかありました。今後バグを発生させないようにするためにもE2Eの導入などが必要になりそうです。</p>
<h3>移行作業は思ったとおりいかない</h3>
<p>とんとん拍子でいけると思ったら、実際に修正するコードが多かったり、データ移行にハマったりと思ったよりも時間がかかりました。事前に調査してたとはいえ、移行作業はどうしても読めないことが多く、時間がかかってしまうなと改めて感じました。</p>The post <a href="https://mintaku-blog.net/transfer-supabase/">個人開発で一部DBとして使用しているContentfulをSupabaseに移行した</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/transfer-supabase/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2462</post-id>	</item>
		<item>
		<title>NetlifyからFirebase Hostingに移行した話</title>
		<link>https://mintaku-blog.net/netlify-to-firebase/</link>
					<comments>https://mintaku-blog.net/netlify-to-firebase/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 15:32:14 +0000</pubDate>
				<category><![CDATA[Firebase]]></category>
		<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2360</guid>

					<description><![CDATA[<p>満を辞して？NetlifyからFirebase Hostingに移行したので、メモっておきます。 なぜNetlifyからFirebase Hostingに移 …</p>
The post <a href="https://mintaku-blog.net/netlify-to-firebase/">NetlifyからFirebase Hostingに移行した話</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>満を辞して？NetlifyからFirebase Hostingに移行したので、メモっておきます。</p>
<h2>なぜNetlifyからFirebase Hostingに移行したのか</h2>
<h3>Firebaseに集約したい</h3>
<p>最近認証機能を実装したことから、Firebase AuthenticationやFirestoreを利用することになり、ホスティングサービスもFirebaseにまとめたい感がありました。</p>
<p>今後もFirebaseのサービスを使っていきたいと考えていたので、早いタイミングで集約していこうと思いました。</p>
<h3>コストが安くなる</h3>
<p>Netlifyの1ヶ月のビルド時間の無料枠は300分で、追加500分ごとに7ドルという料金体系でした。</p>
<p>最初は無料枠でも問題なくビルドできていましたが、コンテンツが増えて無料枠で収まることがなくなり、毎月追加枠を2つ購入していた感じになっていました。</p>
<p>そもそもビルド時間長すぎ問題があり、そちらも解決する必要があるのですが、今後もコンテンツが増えていくことを考えると地味にコストが効いてくるなと思っていました。</p>
<p>そこで色々調べていくとFirebase HostingとGitHub Actionsを組みわせた場合、無料枠は2000分とコストがかからずビルドできることを知り、移行したいと思う大きな要因となりました。</p>
<h3>CDNのエッジが国内にあるので早くなるのでは</h3>
<p>Netlifyの無料プランだと日本のエッジノードが利用できず海外からの配信になっているようで、Page Speed Insightsでチェックすると結構遅いことがわかりました。</p>
<p>Firebase Hostingなら国内からの配信になるようなので、サイトのパフォーマンスも向上すると考えていました。</p>
<p>&nbsp;</p>
<h2>NetlifyからFirebase Hostingへの移行作業</h2>
<h3>ローカルからFirebase Hostingにデプロイできるようにする</h3>
<p>まずは公式を参考にして、ローカルでgenerateしたファイルをFirebase Hostingにデプロイできるようにしました。</p>
<p>デプロイしてみてFirebase Hostingにデフォルトで使われているドメインにアクセスしてみて、ページに問題ないかを確認しました。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://firebase.google.com/docs/hosting/quickstart?hl=ja">Firebase Hosting を使ってみる</a>
			</p>
							<div class="ys-blog-card__dscr">
					Firebase Hosting を始めるためのガイド。Firebase CLI&hellip;				</div>
										<div class="ys-blog-card__domain">firebase.google.com</div>
					</div>
	</div>
</div>

<h3>GitHub Actionsでパイプラインを構築する</h3>
<p>パイプラインを構築するといってもfirebase initするといい感じのymlファイルを生成してくれるので、それを元にちょっと変更しただけでした。</p>
<p>出来上がったパイプラインのymlファイルはこんな感じになりました。ちなみにworkflow_dispatchを追加するとGitHub Actionsから手動でトリガーできるようになります。</p>
<p>特にソースコード変更せずにコンテンツの更新などでビルドしたい場合に役立ちます。</p>
<div>
<div>
<pre class="crayon-plain-tag">name: Deploy to Firebase Hosting on merge
'on':
  push:
    branches:
      - main
  workflow_dispatch:
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm i &amp;&amp; npm run generate
      - uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          repoToken: '${{ secrets.GITHUB_TOKEN }}'
          firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_HOGE }}'
          channelId: live
          projectId: hoge</pre>
</div>
</div>
<h3>Firebase Hostingにドメインを設定する</h3>
<p>この時点でGitHubにPushするとNetlifyとFirebase Hosting両方にデプロイされるようになっている状態です。</p>
<p>あとは独自ドメインをFirebase Hostingの方に設定するだけです。これも公式を元にポチポチ設定していけば完了します。</p>
<p>設定してから反映まで数時間かかったので、移行日が決まっている場合は、あらかじめ考慮しておくと良いでしょう。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://firebase.google.com/docs/hosting/custom-domain?hl=ja">カスタム ドメインを接続する &nbsp;|&nbsp; Firebase Hosting</a>
			</p>
							<div class="ys-blog-card__dscr">
					カスタム ドメインを Firebase Hosting サイトに接続するためのガ&hellip;				</div>
										<div class="ys-blog-card__domain">firebase.google.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h2>NetlifyからFirebase Hostingに移行する際に注意すること</h2>
<p>完全に忘れていたのですが、NetlifyはURLのパスを大文字から小文字に自動で変換していました。</p>
<p>ヘッドレスCMSとしてContentfulを使用しているのですが、そこのIDは自動で大文字小文字などが混ざった文字列を生成しており、それをURLのパスとして利用していました。</p>
<p>そのため、Google検索などからアクセスした際にURLのパスが小文字に変換された文字列になっており、Firebase Hostingに移行した際にFirebaseは小文字変換はしないため、存在しないページとして認識されてしまっていました。</p>
<h3>リダイレクト処理する</h3>
<p>ということで急いで対応しなければならず、一旦Netlifyに切り戻しを行いつつ、対策を考えました。</p>
<p>パッと思いついたのは小文字のパスでアクセスされた際にちゃんと元々の大文字が含まれたパスにリダイレクトする処理を入れることを思いつきました。</p>
<p>ビルドしているログには大文字が含まれたパスで生成されているのが確認できたので、それらを元にサクッとPythonでいい感じにFirebase.jsonのredirectsにそのままそのまま貼っつけられるような処理を書きました。</p><pre class="crayon-plain-tag">url_list = [ここに元々のURLを書く]

mappings = []

for url in url_list:
  source = url.lower()
  destination = url
  mappings.append({
    "source": source,
    "destination": destination,
    "type": 301
  })

print(mappings)</pre><p>printした結果をfirebase.jsonに貼ってPushしてなんとかことなきを得ました。</p>
<p>NetlifyからFirebase Hostingに移行する際に結構ありがちな失敗かと思うので、参考になればと思います。</p>The post <a href="https://mintaku-blog.net/netlify-to-firebase/">NetlifyからFirebase Hostingに移行した話</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/netlify-to-firebase/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2360</post-id>	</item>
		<item>
		<title>個人開発からチーム開発になって取り組んだこと</title>
		<link>https://mintaku-blog.net/team-develop/</link>
					<comments>https://mintaku-blog.net/team-develop/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 06 Apr 2023 12:48:41 +0000</pubDate>
				<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2336</guid>

					<description><![CDATA[<p>個人開発でやっていたサービスが少しづつ大きくなってきたため、去年の夏の終わりくらいから前に同じチームだったエンジニアを誘ってチーム開発で取り組むようになりま …</p>
The post <a href="https://mintaku-blog.net/team-develop/">個人開発からチーム開発になって取り組んだこと</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>個人開発でやっていたサービスが少しづつ大きくなってきたため、去年の夏の終わりくらいから前に同じチームだったエンジニアを誘ってチーム開発で取り組むようになりました。</p>
<p>半年以上経ち、個人開発からチーム開発になって取り組んだことなどをまとめておきます。</p>
<h2>Slackでワークスペースを作ったり、Google Analyticsなど諸々の連携</h2>
<p>まず最初にSlackのワークスペースを作成して、チャットや開発がしやすいように整備しました。また、Githubの連携やチャンネルの作成などチーム開発がしやすいようにしました。</p>
<p>次にGithubやNetlify、Contentfulなどの開発に必要なツールの連携、Google AnalyticsやSearch Console、Clarityなどの各種ツールを招待して使えるようにしました。</p>
<p>その他にもアーキテクチャの説明や各種使い方など、今後チームとして開発する上で必要なことを実施しました。</p>
<h2>アジャイルな開発</h2>
<p><img data-attachment-id="2340" data-permalink="https://mintaku-blog.net/team-develop/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2023-03-22-23-41-15/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?fit=1038%2C546&amp;ssl=1" data-orig-size="1038,546" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2023-03-22 23.41.15" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?fit=300%2C158&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?fit=800%2C421&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?resize=800%2C421&#038;ssl=1" alt="" width="800" height="421" class="aligncenter size-large wp-image-2340" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?resize=1024%2C539&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?resize=300%2C158&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?resize=768%2C404&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/cca91051d15e65225438839d22fa6f12.jpg?w=1038&amp;ssl=1 1038w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>個人開発でやっていた小さなサービスということもあり、柔軟かつ頻繁なリリースを進めるためにアジャイル開発を取り入れました。</p>
<p>同じチームだった時にアジャイル開発でやっていたこともあり、お互いアジャイル開発のメリットややりやすさを感じていました。</p>
<p>カンバンを作成して、1週間を1イテレーションとし、毎週必ずプランニングの時間を入れていました。プランニングでは主に前イテレーションでやったことと次イテレーションでやることを話します。</p>
<p>クォーターの初めに大まかにストーリーを作成し、ポイントをつけていきます。ある程度イテレーションを回していくとベロシティが計測できるため、今クォーターはここまでできそうだねというよう話ができるようになり、スコープを調整しながらアジャイルな開発を進めることができました。</p>
<h3>ふりかえりの実施</h3>
<p><img data-attachment-id="2341" data-permalink="https://mintaku-blog.net/team-develop/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2023-03-22-23-50-37/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?fit=1216%2C444&amp;ssl=1" data-orig-size="1216,444" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2023-03-22 23.50.37" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?fit=300%2C110&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?fit=800%2C292&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?resize=800%2C292&#038;ssl=1" alt="" width="800" height="292" class="aligncenter size-large wp-image-2341" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?resize=1024%2C374&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?resize=300%2C110&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?resize=768%2C280&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/9946a50e0bb0341b38e3b93792c65f41.jpg?w=1216&amp;ssl=1 1216w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>さすがに毎イテレーションのふりかえりまではできていないですが(本来はやった方がいいけど業務後に進めていることもあり毎週は負荷が大きすぎると判断)、ふりかえりも行うようにしました。</p>
<p>実際にふりかえりをしてみるとこれからはこうしていこうやもっとこうすればよかったなど新しい発見や学びがあります。また、お互いに普段思っていることなどを話すので、認識や考えの共有ができる良い機会になりました。</p>
<p>最後に具体的なアクションを出すことで、次にやることが明確化されて、ふりかえりをやった効果をさらに実感できました。</p>
<h2>定期的なオフライン会によるペアプロやリフレッシュ</h2>
<p>プランニングやMTGなど基本はオンラインでやっていますが、月一くらいでオフライン会を実施しています。</p>
<p>オフラインで集まってペアプロしたり、サウナに行ってリフレッシュしたりと作業&amp;遊びみたいな感じになっています。</p>
<p>定期的にオフラインで集まることで雑談やふと思ったアイデアなどを話す機会となり、とても良い取り組みとなっています。</p>
<h2>OKRを立てる</h2>
<p><img data-attachment-id="2343" data-permalink="https://mintaku-blog.net/team-develop/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2023-03-23-18-34-05/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?fit=352%2C268&amp;ssl=1" data-orig-size="352,268" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2023-03-23 18.34.05" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?fit=300%2C228&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?fit=352%2C268&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?resize=352%2C268&#038;ssl=1" alt="" width="352" height="268" class="aligncenter size-full wp-image-2343" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?w=352&amp;ssl=1 352w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2023/03/5d31a6e03fb97a8bc70265ab0577d9e7.png?resize=300%2C228&amp;ssl=1 300w" sizes="(max-width: 352px) 100vw, 352px" data-recalc-dims="1" /></p>
<p>2023年から実際にOKRを立てて、目標を明確にするようにしました。OKRとは、Objectives and Key Resultsの略称で、目的と重要な成果指標のことです。</p>
<p>OKRを考えて立てることで、中長期的なビジョンを掲げることができ、今後の見通しがクリアになりました。</p>
<p>毎週のプランニングでOKRの進捗の確認をすることで、今どの程度達成しているのか、何をやらなければならないのかが明確化され、より推進力を持ってサービスの成長にコミットすることができたと思います。</p>
<p>また、単純に達成されていることが見える化することでモチベーションも上がりますし、達成感も得やすいと思います。</p>
<h2>開発以外のことも共有したり話し合うような時間をつくる</h2>
<p>サービスが大きくなるにつれ、開発以外の取材や外部の方との打ち合わせ、お問い合わせが増えてきました。</p>
<p>チームに入ったエンジニアには主に開発をお任せしてもらっていますが、随時お問い合わせや打ち合わせの内容を共有したり、意見を話したりするようにSlackやMTGで話す時間をつくりました。</p>
<p>また、お問い合わせの内容による対応や対策を話し合ったり、ユーザーの声を拾ってどうしていくかを検討したりと一緒にプロダクトを成長させていくような取り組みをしました。</p>
<p>このように、自分だけが持っているコンテキストをなくすことで、常に共通の知識とビジョンを共有している状態を目指しました。</p>
<p>この辺りは現在自分含め2人だけなのでやっていけている感ありますが、人数が多くなると課題になってくるかなとは思います。</p>The post <a href="https://mintaku-blog.net/team-develop/">個人開発からチーム開発になって取り組んだこと</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/team-develop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2336</post-id>	</item>
		<item>
		<title>個人サービスをリニューアルして諸々の所感</title>
		<link>https://mintaku-blog.net/personal-service/</link>
					<comments>https://mintaku-blog.net/personal-service/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Mon, 31 Oct 2022 15:06:00 +0000</pubDate>
				<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2280</guid>

					<description><![CDATA[<p>最近、個人サービスを完全リニューアルしたので、諸々の所感をまとめてみました。 リニューアルしようと思ったきっかけ 約1年ほど前から運営している個人サービスが …</p>
The post <a href="https://mintaku-blog.net/personal-service/">個人サービスをリニューアルして諸々の所感</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>最近、個人サービスを完全リニューアルしたので、諸々の所感をまとめてみました。</p>
<h2>リニューアルしようと思ったきっかけ</h2>
<p>約1年ほど前から運営している個人サービスがありがたいことに徐々にアクセス数を伸ばし、8月には初めて10万PVを超え、その後も継続的に伸びています。</p>
<p>今後も長くかつ機能を増やして多くの人に愛されるサービスにしていきたいと思い、古い技術やごちゃっているコードなどを綺麗にして保守性・運用性の高いものにしたいと思いリニューアルをすることに決めました。</p>
<p>具体的にはNuxt2 + JavaScriptで書かれたコードをNuxt3 + TypeScriptにしました。特にJSからTSはずっとやりたかったけどなかなか手をつけられなかったところでした。</p>
<p>TSにしたことで型を定義することができ、グッと開発体験が向上しました。やはり静的型付けでないと気持ちよく開発できない感があり、リニューアルして本当に良かったなと思う点でした。</p>
<p>他にはリニューアル前だとビルド時間が長くなっており、Nuxt3で導入されたViteでビルド時間が短縮されました。またNitroによる開発時のホットリロードがかなり早くなり開発体験が向上しました。</p>
<p>&nbsp;</p>
<h2>ざっくりアーキテクチャ</h2>
<p><img data-attachment-id="2284" data-permalink="https://mintaku-blog.net/personal-service/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2022-10-22-8-45-54/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?fit=1350%2C632&amp;ssl=1" data-orig-size="1350,632" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2022-10-22 8.45.54" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?fit=300%2C140&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?fit=800%2C374&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?resize=800%2C374&#038;ssl=1" alt="" width="800" height="374" class="aligncenter size-large wp-image-2284" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?resize=1024%2C479&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?resize=300%2C140&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?resize=768%2C360&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2022/10/38637c8caf31faed26c6e8e7844c6985.jpg?w=1350&amp;ssl=1 1350w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>サービスとしてはJamstack構成でつくられています。他にスクレイピングするためのジョブなどがありますが、ここでは割愛しています。</p>
<p>Jamstack構成として、ヘッドレスCMSはContentful、ホスティングサービスはNetlify、静的サイトジェネレーターはNuxt3です。</p>
<p>厳密に言うと一部クライアントサイドで動的にデータを取得しており、SSG + CSRのSPA構成のページがあるため、完全に全てのページが静的化してAPI通信がないわけではないです。</p>
<p>基本的にGitでmainブランチにPushされた時とContentfulのコンテンツが更新された時にビルドを走らせています。Netlifyの無料枠だとビルド時間が月に300分で今ちょっとギリなので、近々有料プランに移行することになりそうです。</p>
<p>その点Contentfulは無料で結構使えるので助かってます。コンテンツが膨大にならない限りは無料枠でなんとかなりそうです。</p>
<p>今後、動的な機能の開発を増やしたいと考えており、アーキテクチャをどうするか検討中です。サブドメインを取って別のサービスとして切り分けて出そうかと考えています。</p>
<p>いずれにせよ静的コンテンツ中心の現状では、この構成がパフォーマンス的にもコスト的にもSEO的にも良いのではないかと考えています。</p>
<p>&nbsp;</p>
<h2>リニューアルまでの苦労や困難</h2>
<p>技術的なところではSSGできなかったりSVGが読み込めない、動的サイトマップが上手くできないなど色々ありました。</p>
<p>何度かもうリニューアルを諦めようとも思いましたが、粘りに粘ってなんとかリニューアルに漕ぎ着けることができました。</p>
<p>その場で焦って何とかしようとしても上手くいかないことが多く、ちょっと時間を置いてみると意外とサクッと解決したり別の角度からの解決策が浮かんだりしました。</p>
<p>今となって振り返れば大したことないと思うことでも、当時は結構心折れてたりしていたので、精神的に色々思い詰めない方がいいのかなと思っています。</p>
<p>&nbsp;</p>
<h2>Dependabotの導入</h2>
<p>技術的負債を残さないためにも新しくリニューアルしたリポジトリにDependabotを導入しました。</p>
<p>ライブラリがメジャーまたはマイナーバージョンのアップデートされた時に自動的にプルリクエストを作成してくれます。</p>
<p>プルリクエストをマージしてローカル環境でgenerateしてみて問題なければ本番に適用する流れでいい感じにバージョンアップデートに対応できそうです。</p>
<p>実際にdevelopに対してプルリクエストをしてもらうように設定し、開発環境で動かしたりgenerateしてみて動作確認しています。週一で対応していく予定です。</p>
<h2>リニューアル終わってみて</h2>
<p>リニューアル直後はアクセスが微減したりして注視していましたが、2週間くらいして前の水準に戻り安定してきましたので、一旦リニューアル関連の作業は落ち着いた感じです。</p>
<p>リニューアルが終わってみて一安心といった感じで、終わってみてやってほんと良かったなーと思います。開発体験が向上し、運用性・拡張性が増して更なる進化へ積極的に取り組めそうです。</p>
<p>ゼロから作り直すのはパワーが入りますが、その分の達成感はひとしおです。</p>The post <a href="https://mintaku-blog.net/personal-service/">個人サービスをリニューアルして諸々の所感</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/personal-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2280</post-id>	</item>
		<item>
		<title>Docker + Node.jsのアプリにPM2を導入する</title>
		<link>https://mintaku-blog.net/node-pm2/</link>
					<comments>https://mintaku-blog.net/node-pm2/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 11 Nov 2021 03:05:55 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=2079</guid>

					<description><![CDATA[<p>サーバーがダウンを防ぐためDocker + Node.jsのアプリにPM2を導入してみました。 エラーが起きるとサーバーが落ちる Node.jsでAPIを開 …</p>
The post <a href="https://mintaku-blog.net/node-pm2/">Docker + Node.jsのアプリにPM2を導入する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>サーバーがダウンを防ぐためDocker + Node.jsのアプリにPM2を導入してみました。</p>
<h2>エラーが起きるとサーバーが落ちる</h2>
<p>Node.jsでAPIを開発しているのですが、エラーが発生するとサーバーがダウンしてしまいます。一度サーバーがダウンしてしまうと、次リクエストから応答しなくなります。</p>
<p>try/catchでエラーハンドリングしていても、予期せぬところでエラーが発生する可能性があるため、さすがに運用していく上ではサーバーが落ちないようにしたいです。</p>
<p>なんとかサーバーが落ちないようにできないものかと調べてみると、PM2が良さそうな感じでした。</p>
<p>&nbsp;</p>
<h2>PM2とは</h2>
<p>PM2はNode.jsアプリケーションのプロセス管理を行うためのオープンソースです。PM2を使うことで、Node.jsアプリケーションの起動やログ管理、モニタリングができます。</p>
<p>プロセスの状態を常に監視しているため、プロセスが停止した場合などに自動で再起動させる機能を持っています。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/raw.githubusercontent.com/unitech/pm2/master/pres/pm2.20d3ef.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://pm2.keymetrics.io/">PM2 - Home</a>
			</p>
							<div class="ys-blog-card__dscr">
					PM2 is an advanced production process ma&hellip;				</div>
										<div class="ys-blog-card__domain">pm2.keymetrics.io</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h2>PM2を導入する</h2>
<p>PM2を導入してみます。まずpackage.jsonにpm2を追加します。</p>
<p>・package.json</p><pre class="crayon-plain-tag">…

  "dependencies": {

    ...

    "pm2": "latest"
  },

…</pre><p>次にPM2の設定ファイルを作成します。scriptの箇所などは適宜読み替える必要があります。watchをtrueにすることでコードが変更があった場合に自動で再起動してくれます。</p>
<p>・pm2.config.json</p><pre class="crayon-plain-tag">}
  "name": "sample-app",
  "script" : "ts-node src/driver/server.ts",
  "watch": true,
  "env" : {
    "NODE_ENV" : "development"
  },
  "env_production" : {
    "NODE_ENV" : "production"
  }
}</pre><p>&nbsp;</p>
<h2>Dockerfileを修正する</h2>
<p>Dockerfileを修正し、先ほど作成したpm2.config.jsonを読み込ませてpm2を使えるようにします。</p>
<p>&#8211;no-daemonオプションを指定することで、PM2を実行し続けることができます。</p>
<p>・Dockerfile</p><pre class="crayon-plain-tag">FROM node:16
WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install
RUN npm install -g ts-node

COPY . .

EXPOSE 5000

CMD node_modules/pm2/bin/pm2 --no-daemon start pm2.config.json</pre><p>&nbsp;</p>
<h2>PM2で実際に動かしてみる</h2>
<p>Dockerを再度ビルドして動かしみます。</p>
<p><img data-attachment-id="2082" data-permalink="https://mintaku-blog.net/node-pm2/image1-13/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?fit=1308%2C1202&amp;ssl=1" data-orig-size="1308,1202" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?fit=300%2C276&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?fit=800%2C735&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?resize=800%2C735&#038;ssl=1" alt="" width="800" height="735" class="aligncenter size-large wp-image-2082" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?resize=1024%2C941&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?resize=300%2C276&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?resize=768%2C706&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image1.png?w=1308&amp;ssl=1 1308w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>無事動きました。</p>
<p>&nbsp;</p>
<h2>挙動の違いを確認する</h2>
<h3>nodemonの場合</h3>
<p><img data-attachment-id="2080" data-permalink="https://mintaku-blog.net/node-pm2/image3-7/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?fit=1170%2C166&amp;ssl=1" data-orig-size="1170,166" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?fit=300%2C43&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?fit=800%2C113&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?resize=800%2C113&#038;ssl=1" alt="" width="800" height="113" class="aligncenter size-large wp-image-2080" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?resize=1024%2C145&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?resize=300%2C43&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?resize=768%2C109&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image3.png?w=1170&amp;ssl=1 1170w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>従来のnodemonの場合は、以下のようにエラーが発生した場合「app crashed」になりコードの変更が検知されるまでは再起動されませんでした。</p>
<p>そのため、以降のリクエストはNo Responseとなってしまいます。</p>
<h3>PM2の場合</h3>
<p><img data-attachment-id="2081" data-permalink="https://mintaku-blog.net/node-pm2/image2-10/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?fit=1184%2C318&amp;ssl=1" data-orig-size="1184,318" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?fit=300%2C81&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?fit=800%2C215&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?resize=800%2C215&#038;ssl=1" alt="" width="800" height="215" class="aligncenter size-large wp-image-2081" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?resize=1024%2C275&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?resize=300%2C81&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?resize=768%2C206&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2021/11/image2.png?w=1184&amp;ssl=1 1184w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>今回導入したPM2の場合は、以下のようにエラーが発生した場合でもすぐにサーバーが再起動しました。</p>
<p>そのため、以降のリクエストも受け付けることができます。</p>The post <a href="https://mintaku-blog.net/node-pm2/">Docker + Node.jsのアプリにPM2を導入する</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/node-pm2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2079</post-id>	</item>
		<item>
		<title>【LINE謎】LINEで遊べる謎解きの作り方と開発方法まとめ</title>
		<link>https://mintaku-blog.net/line-mystery/</link>
					<comments>https://mintaku-blog.net/line-mystery/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 08 May 2020 05:42:04 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[個人開発]]></category>
		<category><![CDATA[その他]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=1457</guid>

					<description><![CDATA[<p>LINE謎のBotを作成する上で、以下の記事や本を参考にしました。 参考：LINE謎の開発についてまとめ 参考：プログラミング初心者でも無料で簡単にLINE …</p>
The post <a href="https://mintaku-blog.net/line-mystery/">【LINE謎】LINEで遊べる謎解きの作り方と開発方法まとめ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LINE謎のBotを作成する上で、以下の記事や本を参考にしました。</p>
<p>参考：<a href="https://qiita.com/acerolaproduction/items/d89b51a7ae7b3f18370e" target="_blank" rel="noopener noreferrer">LINE謎の開発についてまとめ</a></p>
<p>参考：<a href="https://note.com/tatsuaki_w/n/nfed622429f4a" target="_blank" rel="noopener noreferrer">プログラミング初心者でも無料で簡単にLINE BOTが作れるチュートリアル｜渡なべ<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f372.png" alt="🍲" class="wp-smiley" style="height: 1em; max-height: 1em;" />達明｜note</a></p>
<p>参考：<a href="https://qiita.com/mick_k1218/items/0ceb411f63a298decad2" target="_blank" rel="noopener noreferrer">【入門】Google Apps ScriptでLINE botを作成する</a></p>
<p>特にこちらのKindle本ではとてもわかりやすく解説されています。こちらの本では実際に作られている謎解きやマーケティング戦略まで紹介されているので、ご一読することをおすすめします。</p>
<p><iframe loading="lazy" title="ゼロから始めて1万人に遊ばれた謎解きゲームの作り方からマーケティングまで: ~LINE bot編~" type="text/html" width="800" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=kpd&#038;ref_=k4w_oembed_05NwxO9luBkiId&#038;asin=B07YK39CY9&#038;tag=kpembed-20"></iframe></p>
<h2>LINE謎とは</h2>
<p>LINEの公式アカウントを用いて、主にBot形式で謎を出題する謎解き形式をLINE謎と呼ばれています。</p>
<p>LINEのアカウントさえあれば、手軽に謎解きに挑戦することができます。LINEのMessaging APIが開放されてからLINE謎が出現し、少しずつ広まってきているようです。</p>
<h2>LINE謎開発の事前準備</h2>
<p>事前準備として以下が必要となります。今回は参考記事通りにGAS(Google App Script)を使用してコーディングを行っています。Googleアカウントは登録された前提とします。</p>
<ul>
<li>Googleアカウント登録</li>
<li>LINE Developers登録</li>
<li>LINE Bot Designer(必須ではない)</li>
</ul>
<h3>LINE Developersの登録</h3>
<p><img data-attachment-id="1458" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-18-25-43/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?fit=2786%2C1500&amp;ssl=1" data-orig-size="2786,1500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 18.25.43" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?fit=300%2C162&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?fit=800%2C430&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1458" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=800%2C430&#038;ssl=1" alt="" width="800" height="430" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=1024%2C551&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=768%2C413&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=1536%2C827&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?resize=2048%2C1103&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/cc9ee2ab3f1006ca700e7e4e39e79772.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>まず、以下のリンクからLINE開発者登録を行います。既にLINEアカウントを持っている場合は、そのアカウントで登録することができます。QRコードログインで簡単に認証することができます。</p>
<p><a href="https://developers.line.me/ja/" target="_blank" rel="noopener noreferrer">LINE Developers</a></p>
<p><img data-attachment-id="1459" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-18-30-20/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?fit=1104%2C1198&amp;ssl=1" data-orig-size="1104,1198" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 18.30.20" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?fit=276%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?fit=800%2C868&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1459" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?resize=800%2C868&#038;ssl=1" alt="" width="800" height="868" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?resize=944%2C1024&amp;ssl=1 944w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?resize=276%2C300&amp;ssl=1 276w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?resize=768%2C833&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/88cf9f06458d1fc3e26ace49a91920a4.png?w=1104&amp;ssl=1 1104w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<h3>LINE Bot Designerのダウンロード</h3>
<p>LINE Bot Designerを使用することで、簡単かつ短時間でLINE Botのプロトタイプを作成することができます。GUIで感覚的にチャットボットを設計できます。</p>
<p>以下のリンクからLINE Bot Designerをダウンロードします。後ほど使用しますので、その後インストールまでやっておきましょう。</p>
<p><a href="https://developers.line.biz/ja/services/bot-designer/" target="_blank" rel="noopener noreferrer">LINE Bot Designer</a></p>
<h2>Messaging APIで新規チャンネルを作成</h2>
<p><img data-attachment-id="1464" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-20-53-19/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?fit=2568%2C974&amp;ssl=1" data-orig-size="2568,974" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 20.53.19" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?fit=300%2C114&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?fit=800%2C303&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1464" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=800%2C303&#038;ssl=1" alt="" width="800" height="303" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=1024%2C388&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=300%2C114&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=768%2C291&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=1536%2C583&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?resize=2048%2C777&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/058a48c08bd98f266eb318748037874d.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>先ほど登録したLINE Developersにログインし、「新規チャンネル作成」を押します。新規チャンネル作成に必要な項目を入力します。</p>
<p>ここで作成するLINE謎のチャンネル名やアイコンなどを登録します。なおチャンネル名は7日間は変更できないため、注意が必要です。</p>
<p><img data-attachment-id="1465" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-20-53-44/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?fit=2606%2C1434&amp;ssl=1" data-orig-size="2606,1434" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 20.53.44" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?fit=300%2C165&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?fit=800%2C440&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1465" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=800%2C440&#038;ssl=1" alt="" width="800" height="440" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=1024%2C563&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=768%2C423&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=1536%2C845&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?resize=2048%2C1127&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/af938c8996b9fda0f27756efdb4df9b3.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>LINE Messaging API：<a href="https://developers.line.biz/ja/services/messaging-api/" target="_blank" rel="noopener noreferrer">Messaging APIの特徴 Messaging APIは</a></p>
<h2>GASからWebhook URLを取得する</h2>
<p>まず、自身のGoogleアカウントからGoogleドライブを開き、Googleスプレッドシートを新規作成します。</p>
<p>スプレッドシートを開いたら、「ツール」→「スクリプトエディタ」を選択します。</p>
<p><img data-attachment-id="1466" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-9-38-19/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?fit=2768%2C1526&amp;ssl=1" data-orig-size="2768,1526" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 9.38.19" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?fit=300%2C165&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?fit=800%2C441&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1466" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=800%2C441&#038;ssl=1" alt="" width="800" height="441" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=1024%2C565&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=300%2C165&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=768%2C423&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=1536%2C847&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?resize=2048%2C1129&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/c051166aa032a1025cb3921cfcc04e31.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>選択すると、以下のようなスクリプトエディタが表示されます。左上にあるプロジェクト名を入力し、「公開」→「ウェブアプリケーションとして導入」を選択してください。</p>
<p><img data-attachment-id="1467" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-9-38-36/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?fit=1242%2C632&amp;ssl=1" data-orig-size="1242,632" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 9.38.36" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?fit=300%2C153&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?fit=800%2C407&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1467" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?resize=800%2C407&#038;ssl=1" alt="" width="800" height="407" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?resize=1024%2C521&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?resize=300%2C153&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?resize=768%2C391&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/824959a761429044914e86620f4b8beb.png?w=1242&amp;ssl=1 1242w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>それぞれ、以下のように設定し「Deploy」を押下します。</p>
<p><img data-attachment-id="2144" data-permalink="https://mintaku-blog.net/line-mystery/line-deploy/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?fit=892%2C798&amp;ssl=1" data-orig-size="892,798" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="line-deploy" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?fit=300%2C268&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?fit=800%2C716&amp;ssl=1" loading="lazy" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?resize=800%2C716&#038;ssl=1" alt="" width="800" height="716" class="aligncenter size-full wp-image-2144" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?w=892&amp;ssl=1 892w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?resize=300%2C268&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/line-deploy.png?resize=768%2C687&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>表示された「Current web app URL」をコピーします。これがWebhook URLとなります。</p>
<p><img data-attachment-id="1469" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-9-45-47/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?fit=886%2C526&amp;ssl=1" data-orig-size="886,526" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 9.45.47" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?fit=300%2C178&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?fit=800%2C475&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1469" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?resize=800%2C475&#038;ssl=1" alt="" width="800" height="475" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?w=886&amp;ssl=1 886w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?resize=300%2C178&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/657511a77d377aee9c19daa20d6f1ab8.png?resize=768%2C456&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<h2>LINE DevelopersのWebhook設定でGASと連携する</h2>
<p>作成したチャンネルからMessaging API設定を選択します。下にあるWebhook設定のWebhook URLに先ほどコピーしたURLをペーストします。また、Webhookの利用をONにします。</p>
<p><img data-attachment-id="1470" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-9-51-42/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?fit=2116%2C788&amp;ssl=1" data-orig-size="2116,788" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 9.51.42" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?fit=300%2C112&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?fit=800%2C298&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1470" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=800%2C298&#038;ssl=1" alt="" width="800" height="298" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=1024%2C381&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=300%2C112&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=768%2C286&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=1536%2C572&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?resize=2048%2C763&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/61d6c3c8d15c2511791f9eb4f159a699.png?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>次にさらに下にあるチャンネルアクセストークンの発行を行います。このチャンネルアクセストークンは後で使います。</p>
<p><img data-attachment-id="1471" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-9-57-05/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?fit=1832%2C234&amp;ssl=1" data-orig-size="1832,234" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 9.57.05" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?fit=300%2C38&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?fit=800%2C102&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1471" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?resize=800%2C102&#038;ssl=1" alt="" width="800" height="102" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?resize=1024%2C131&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?resize=300%2C38&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?resize=768%2C98&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?resize=1536%2C196&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?w=1832&amp;ssl=1 1832w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/1a9f273adb20a35baaabeed408a496b3.png?w=1600&amp;ssl=1 1600w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<h2>GAS(Google App Script)を使って、ユーザとの応答形式LINE Botのスクリプトを実装する</h2>
<p>GASの画面に戻り、ユーザとの応答形式のスクリプトを実装していきます。JavaScriptで書くことができます。</p>
<h3>チャンネルアクセストークンの設定とリクエスト判定</h3>
<p>まずはじめにチャンネルアクセストークンを設定します。先ほど発行したチャンネルアクセストークンを変数に代入しましょう。</p>
<p>次にユーザから送られてくるリクエスト判定を行います。event.typeによって友達追加かメッセージかを判定します。</p><pre class="crayon-plain-tag">// チャンネルアクセストークンを設定
var channel_access_token = "先ほど発行したチャンネルアクセストークン";

// ユーザからのリクエスト判定(友達追加またはメッセージ)
function doPost(e) {
  var events = JSON.parse(e.postData.contents).events;
  events.forEach(function(event) {
    if (event.type == "message") {
      sendMessage(event);
    }
    if (event.type == "follow") {
      sendFollowMessage(event);
    }
  });
}</pre><p></p>
<h3>友達追加時の挙動</h3>
<p>ユーザから友達追加された際に返すメッセージを設定します。setFollowMessageで友達追加時のメッセージ用意し、ユーザに返します。</p><pre class="crayon-plain-tag">function sendFollowMessage(e) {
  var followMessage = setFollowMessage(e);
  var postData = {
    "replyToken": e.replyToken,
    "messages": followMessage
  };
  var options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + channel_access_token
    },
    "payload": JSON.stringify(postData)
  };
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}

// 友達追加された際に返すメッセージ
function setFollowMessage(e) {
  var message = [{
    "type": "text",
    "text": "友達追加ありがとうございます！"
  }];
  return (message)
}</pre><p></p>
<h3>メッセージが送られてきた際の挙動</h3>
<p>友達追加時と同様にsetMessageに送られてきたメッセージに対応する返信を用意します。</p>
<p>switch文でそれぞれのメッセージに対応する返信を書いていきます。これがユーザとの応答形式Botの中身になります。LINE謎の場合は答えやヒントなどに対応する返信を書いていくことになります。</p>
<p>defaultは想定していないメッセージが送られてきた場合の返信を書きます。</p><pre class="crayon-plain-tag">function sendMessage(e) {
  var message = setMessage(e);
  var postData = {
    "replyToken": e.replyToken,
    "messages": message
  };
  var options = {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + channel_access_token
    },
    "payload": JSON.stringify(postData)
  };
  UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}

// メッセージが送られてきた際に返す返信の条件分岐
function setMessage(e) {
  switch (e.message.text) {
    case "答え":
      var message = [
        {
          "type": "text",
          "text": "正解です。"
        }
      ];
      return(message)
      break;

  case "ヒント":
    var message = [
      {
        "type": "text",
        "text": "ヒントは〇〇です。"
      }
    ];
    return(message)
    break;

  default:
    var message = [
      {
        "type": "text",
        "text": "ヒントが欲しい場合は「ヒント」と入力してください。"
      }
    ];
    return(message)
    break;
  }
}</pre><p>以上で応答形式Botの完成です。完成後は、「公開」→「ウェブアプリケーションとして導入」を選択し、バージョンを「new」にして再度デプロイしましょう。すると反映されていることが確認できると思います。</p>
<h2>返信メッセージをリッチにしたい</h2>
<p>返信メッセージをもっとリッチにしたい場合は、先ほどインストールしたLINE Bot Designerを使ってみましょう。</p>
<p>インストールが完了後、プロジェクトを作成を選択します。</p>
<p><img data-attachment-id="1463" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-18-51-56/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?fit=912%2C992&amp;ssl=1" data-orig-size="912,992" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 18.51.56" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?fit=276%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?fit=800%2C870&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1463" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?resize=800%2C870&#038;ssl=1" alt="" width="800" height="870" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?w=912&amp;ssl=1 912w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?resize=276%2C300&amp;ssl=1 276w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/3c0249882968b20b5e95da4e7c6bd385.png?resize=768%2C835&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>プロジェクトの設定を行います。</p>
<p><img data-attachment-id="1461" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-18-51-01/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?fit=2692%2C1748&amp;ssl=1" data-orig-size="2692,1748" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 18.51.01" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?fit=300%2C195&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?fit=800%2C520&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1461" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=800%2C520&#038;ssl=1" alt="" width="800" height="520" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=1024%2C665&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=300%2C195&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=768%2C499&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=1536%2C997&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?resize=2048%2C1330&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/6b487b7d8cd9331428a53cebba1d025e.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>設定完了後、プロトタイプをGUIで作成することができます。プロトタイプ完成後、右下のJSONをコピーすることで、そのまま使用することができます。</p>
<p><img data-attachment-id="1462" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-07-18-51-35/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?fit=2672%2C1722&amp;ssl=1" data-orig-size="2672,1722" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-07 18.51.35" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?fit=300%2C193&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?fit=800%2C516&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1462" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=800%2C516&#038;ssl=1" alt="" width="800" height="516" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=1024%2C660&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=300%2C193&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=768%2C495&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=1536%2C990&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?resize=2048%2C1320&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/dbbc6d9a4b9aed8697156d8840e8b0ad.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>ここで画像・動画、テンプレートメッセージなどを設計し、JSONコードをそのままGASにコピペで使うことができます。LINE謎を作成する場合は画像などを使うと思いますので、こちらを積極的に活用してみましょう。</p>
<p><img data-attachment-id="1472" data-permalink="https://mintaku-blog.net/line-mystery/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2020-05-08-11-37-52/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?fit=2686%2C1736&amp;ssl=1" data-orig-size="2686,1736" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="スクリーンショット 2020-05-08 11.37.52" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?fit=300%2C194&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?fit=800%2C517&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-1472" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=800%2C517&#038;ssl=1" alt="" width="800" height="517" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=1024%2C662&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=300%2C194&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=768%2C496&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=1536%2C993&amp;ssl=1 1536w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?resize=2048%2C1324&amp;ssl=1 2048w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?w=1600&amp;ssl=1 1600w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/73b9131f2040382e3d5339634098fc2f.png?w=2400&amp;ssl=1 2400w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<h2>実際にLINE謎を作ってみた</h2>
<p><img data-attachment-id="1486" data-permalink="https://mintaku-blog.net/line-mystery/m-1/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?fit=1024%2C512&amp;ssl=1" data-orig-size="1024,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="M (1)" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?fit=300%2C150&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?fit=800%2C400&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-1486" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?resize=800%2C400&#038;ssl=1" alt="" width="800" height="400" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?resize=300%2C150&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2020/05/M-1.png?resize=768%2C384&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>実際にLINE謎を作ってみました。ざっくりストーリーから考え、次にストーリーにあわせた謎を作り、開発という流れで行いました。こういう謎解きを作るのは初めてでしたが、丸一日かけて公開まで漕ぎ着けることができました。</p>
<p>初心者向けのLINE謎で10分くらいで解けるので、もし時間があればやっていただけると嬉しいです。</p>
<p>地球最後の日に残された謎：<a href="https://lin.ee/tV2tCPuy" target="_blank" rel="noopener noreferrer">https://lin.ee/tV2tCPuy</a></p>The post <a href="https://mintaku-blog.net/line-mystery/">【LINE謎】LINEで遊べる謎解きの作り方と開発方法まとめ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/line-mystery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1457</post-id>	</item>
		<item>
		<title>Vue.jsでChrome拡張機能開発してみた【シンプル電卓】</title>
		<link>https://mintaku-blog.net/chrome-calculator/</link>
					<comments>https://mintaku-blog.net/chrome-calculator/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Tue, 08 Jan 2019 14:22:05 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=793</guid>

					<description><![CDATA[<p>フロントサイドの開発はjQueryを使っていたため、新しくJavaScriptのフレームワークを使ってみたいと思い、シンプルにやりたいことができそうなVue …</p>
The post <a href="https://mintaku-blog.net/chrome-calculator/">Vue.jsでChrome拡張機能開発してみた【シンプル電卓】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>フロントサイドの開発はjQueryを使っていたため、新しくJavaScriptのフレームワークを使ってみたいと思い、シンプルにやりたいことができそうなVue.jsを選択しました。</p>
<p>せっかくやるなら何か成果物を作りたいと思い、Chrome拡張機能を作ることを目標に勉強を進めていきました。ということで冬休みの時間を活用して、Vue.jsで電卓を作ってみました。</p>
<h2>作ったもの</h2>
<p><img data-attachment-id="796" data-permalink="https://mintaku-blog.net/chrome-calculator/%e3%82%b7%e3%83%b3%e3%83%95%e3%82%9a%e3%83%ab%e9%9b%bb%e5%8d%93%e6%a9%9f-simple-calculator/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/シンプル電卓機-Simple-Calculator.gif?fit=822%2C490&amp;ssl=1" data-orig-size="822,490" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="シンプル電卓機-Simple-Calculator" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/シンプル電卓機-Simple-Calculator.gif?fit=300%2C179&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/シンプル電卓機-Simple-Calculator.gif?fit=800%2C477&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-796" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/シンプル電卓機-Simple-Calculator.gif?resize=800%2C477" alt="" width="800" height="477" data-recalc-dims="1" /></p>
<h3>シンプル電卓機 Simple Calculator</h3>
<p><img data-attachment-id="795" data-permalink="https://mintaku-blog.net/chrome-calculator/logo_calculator/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" data-orig-size="128,128" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="logo_calculator" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-795" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?resize=128%2C128" alt="" width="128" height="128" data-recalc-dims="1" /></p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://lh3.googleusercontent.com/R-ddc4GC0a9OO8JL1XMXd-5cCzZb7sAcTOe8H-qhm9tzVoQ4DzYZZafIWmZwmJFf7DjZS2HnZ_kJWxVQiruffTwSaw=s128-rj-sc0x00ffffff" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://chrome.google.com/webstore/detail/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E9%9B%BB%E5%8D%93%E6%A9%9F-simple-calculator/dlaggloabkagldkpfckkejkhjhcimkih?hl=ja&gl=JP">シンプル電卓機 Simple Calculator - Chrome ウェブストア</a>
			</p>
							<div class="ys-blog-card__dscr">
					電卓として使うことができます。ちょっとした計算や確認がすぐに実行できて便利です。				</div>
										<div class="ys-blog-card__domain">chrome.google.com</div>
					</div>
	</div>
</div>

<p>難しく簡単すぎない電卓を作ってみることにしました。仕事でもたまに使うので個人的に有用なツールになると思いました。</p>
<p>ポップアップで電卓機能を使えるため、すぐに計算をしたい時にとても便利です。実際に作った後、活用しています。</p>
<p>Vue.jsの環境は以下の記事を参考に構築しました。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRjEuZ3JhdmF0YXIuY29tJTJGYXZhdGFyJTJGZmM5ZWIyOWExMGFiYmRlMjA2NTMxZGY5OGUzNWNkNTglM0ZkJTNEaHR0cHMlMjUzQSUyNTJGJTI1MkZpZGVudGljb25zLmdpdGh1Yi5jb20lMjUyRjFiMTJkZTc0N2ZjZjM5ZTU1MTU0OTliMDZiMmQ4MjAzLnBuZyUyNnIlM0R4P2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZiZz1GRkZGRkYmZm09cG5nMzImcz0xYjJmOGFiNzVmZjk0OWI1OTc4NzZkMmEyMzBlYzJlMA%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D13aebbd2c75d94bfa8a28008ed4a629c?ixlib=rb-4.0.0&amp;w=1200&amp;fm=jpg&amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9VnVlLmpzJTIwJUUzJTgyJTkyJTIwdnVlLWNsaSUyMCVFMyU4MiU5MiVFNCVCRCVCRiVFMyU4MSVBMyVFMyU4MSVBNiVFMyU4MiVCNyVFMyU4MyVCMyVFMyU4MyU5NyVFMyU4MyVBQiVFMyU4MSVBQiVFMyU4MSVBRiVFMyU4MSU5OCVFMyU4MiU4MSVFMyU4MSVBNiVFMyU4MSVCRiVFMyU4MiU4QiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTRmYjM5MDRiNDlmMzY5MzZhNGRlOGU2YWI4N2Y1MGJi&amp;mark-x=120&amp;mark-y=112&amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDA1NjcwMDAmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz0xNjZiNjliN2UwZDYxOTE4YWZhNTBkYWIyMTAzZTQxMQ&amp;blend-x=242&amp;blend-y=480&amp;blend-w=838&amp;blend-h=46&amp;blend-fit=crop&amp;blend-crop=left%2Cbottom&amp;blend-mode=normal&amp;s=14175280d4128c612e9026f43a953a4a" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://qiita.com/567000/items/dde495d6a8ad1c25fa43">Vue.js を vue-cli を使ってシンプルにはじめてみる #JavaScript - Qiita</a>
			</p>
							<div class="ys-blog-card__dscr">
					Vue.js を vue-cli でシンプルに過不足なくスタートする はじめに &hellip;				</div>
										<div class="ys-blog-card__domain">qiita.com</div>
					</div>
	</div>
</div>

<h2>電卓のボタン部分の実装</h2>
<p></p><pre class="crayon-plain-tag">&lt;table align="center"&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;button @click="clear()"&gt;C&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="clearAll()"&gt;CA&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseArithmetic('%');"&gt;%&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseArithmetic('×');"&gt;×&lt;/button&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('7');"&gt;7&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('8');"&gt;8&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('9');"&gt;9&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseArithmetic('÷');"&gt;÷&lt;/button&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('4');"&gt;4&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('5');"&gt;5&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('6');"&gt;6&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseArithmetic('-');"&gt;-&lt;/button&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('1');"&gt;1&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('2');"&gt;2&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('3');"&gt;3&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseArithmetic('+');"&gt;+&lt;/button&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('0');"&gt;0&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="chooseNumber('.');"&gt;.&lt;/button&gt;&lt;/td&gt;
        &lt;td&gt;&lt;button @click="calculationResult();"&gt;=&lt;/button&gt;&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;</pre><p>電卓のボタン部分です。数字や記号押下時にそれぞれのメソッドが発動します。必要最低限の四則演算機能を実装しました。</p>
<h2>電卓の実装</h2>
<h3>電卓の計算表示部分の実装</h3>
<p>computedは紐づいた値が変更されると、その値に依存している全てのバインディングが更新されます。</p>
<p>今回の電卓の場合は、ボタンを押下する度に入力値や四則演算記号が変わるため、以下のような実装となります。</p>
<p>選択した数字と計算結果の数字は、計算中かどうか(inputNumberFlgフラグ)で判定しています。</p><pre class="crayon-plain-tag">computed: {
    showArithmetic() {
        return this.selectedArithmetic;
    },

    showNumber() {
        let showNumber;
        if (this.inputNumberFlg) {
            var selectNumber = String(this.selectedNumber);
            showNumber = selectNumber.replace(/^0{1,}([^.])/, "$1");
        } else {
            showNumber = this.chooseNumberArray.reduce((prevNumber, currenNumber, index, array) =&gt; {
                return this.calculateNumber(prevNumber, currenNumber, index - 1);
            });
        }

        return Number(showNumber).toLocaleString(undefined, {maximumFractionDigits: 20});
    }
}</pre><p></p>
<h3>計算処理の実装</h3>
<p>計算部分はswitch文で判定し、実行しています。</p><pre class="crayon-plain-tag">calculateNumber(prevNumber, currenNumber, index) {
    switch (this.chooseArithmeticArray[index]) {
        case "+":
            return prevNumber + currenNumber;
            break;
        case "-":
            return prevNumber - currenNumber;
            break;
        case "÷":
            return prevNumber / currenNumber;
            break;
        case "×":
            return prevNumber * currenNumber;
            break;
        case "%":
            return prevNumber % currenNumber;
            break;
    }
}</pre><p></p>
<h3>C(Clear)とCA(ClearAll)の削除処理の実装</h3>
<p>C(Clear)ボタン押下時は選択した数字列から1つ前の数字を削除します。CA(ClearAll)ボタン押下時は全ての数字・記号を初期化します。</p><pre class="crayon-plain-tag">// Clear押下時
clear() {
    if (this.selectedNumber === "0") return;
    this.selectedNumber = this.selectedNumber.slice(0, -1);
},
// ClearAll押下時
clearAll() {
    this.chooseNumberArray = [];
    this.chooseArithmeticArray = [];
    this.selectedNumber = "0";
    this.selectedArithmetic = "";
    this.inputNumberFlg = true;
}</pre><p></p>
<h3>電卓のデザイン</h3>
<p>電卓のボタンはキーボードのような雰囲気にしました。クリックするとキーが押されたような動きになっています。</p><pre class="crayon-plain-tag">button {
    height: 40px;
    min-width: 60px;
    padding: 0 10px;
    margin: 5px 5px;
    background: #EFF0F2;
    border-radius: 4px;
    border-top: 1px solid #F5F5F5;
    box-shadow: 0 0 25px #E8E8E8 inset, 0 1px 0 #C3C3C3, 0 2px 0 #C9C9C9, 0 2px 3px #333333;
    color: #AAAAAA;
    text-shadow: 0 1px 0 #F5F5F5;
    font: bold 14px arial;
    text-align: center;
    line-height: 41px;
    display: inline-block;
}

button:active {
    box-shadow: inset 0 0 2px rgba(128, 128, 128, 0.1);
    transform: translateY(2px);
}</pre><p></p>
<h3>Vue.jsで実装が完了したらビルドする</h3>
<p>実装が完了したら以下のコマンドで、プロジェクトをビルドします。</p><pre class="crayon-plain-tag">npm run build</pre><p>ビルドが成功すると以下のように表示されます。</p><pre class="crayon-plain-tag">Hash: d37a099a70e29c8f2173
Version: webpack 3.12.0
Time: 16257ms
    Asset Size Chunks Chunk Names
    static/js/vendor.42fc6c515ccdfe89bd76.js 113 kB 0 [emitted] vendor
    static/js/app.293cb31b95d7a655e6e8.js 4.68 kB 1 [emitted] app
    static/js/manifest.2ae2e69a05c33dfc65f8.js 857 bytes 2 [emitted] manifest
    static/css/app.f9db14073482cd26a153303c43800d43.css 1.14 kB 1 [emitted] app
    static/css/app.f9db14073482cd26a153303c43800d43.css.map 2.45 kB [emitted]
    static/js/vendor.42fc6c515ccdfe89bd76.js.map 560 kB 0 [emitted] vendor
    static/js/app.293cb31b95d7a655e6e8.js.map 20.4 kB 1 [emitted] app
    static/js/manifest.2ae2e69a05c33dfc65f8.js.map 4.97 kB 2 [emitted] manifest
    index.html 527 bytes [emitted]

Build complete.

Tip: built files are meant to be served over an HTTP server.
Opening index.html over file:// won't work.</pre><p>ビルド後、distディレクトリが作成されます。</p>
<p>あとはChrome拡張用にマニフェストファイルなどを追加し、zip化したら完成。今回の場合は、以下のようなディレクトリ構成になりました。</p><pre class="crayon-plain-tag">images
    -16.png
    -19.png
    -38.png
    -48.png
    -128.png
static
    -css
        -ビルドされたファイル
    -js
        -ビルドされたファイル
index.html
manifest.json</pre><p>imagesディレクトリにはChrome拡張機能のアイコンの画像がサイズごとに分けて格納されています。</p>
<p>マニフェストファイルの説明など、Chrome拡張機能登録に必要なことは以下の記事で詳しく説明しています。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img width="560" height="315" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?fit=560%2C315&amp;ssl=1" class="attachment-large size-large wp-post-image" alt="" loading="lazy" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?w=560&amp;ssl=1 560w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?resize=300%2C169&amp;ssl=1 300w" sizes="(max-width: 560px) 100vw, 560px" data-attachment-id="787" data-permalink="https://mintaku-blog.net/chrome-todolist/4-2/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?fit=560%2C315&amp;ssl=1" data-orig-size="560,315" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="4" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?fit=300%2C169&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/4.png?fit=560%2C315&amp;ssl=1" />			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://mintaku-blog.net/chrome-todolist/">【Chrome拡張機能】シンプルなToDoリスト・メモ帳を開発してみた</a>
			</p>
							<div class="ys-blog-card__dscr">
					個人的に開発して使っていたToDoリストをたくさんの方に使ってもらうにはどうした&hellip;				</div>
										<div class="ys-blog-card__domain">mintaku-blog.net</div>
					</div>
	</div>
</div>

<p>以上、Vue.jsでChrome拡張開発をした流れを紹介しました。</p>
<p>よろしければ開発したシンプル電卓機 Simple Calculatorを使ってみてくださいね。</p>
<p><img data-attachment-id="795" data-permalink="https://mintaku-blog.net/chrome-calculator/logo_calculator/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" data-orig-size="128,128" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="logo_calculator" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?fit=128%2C128&amp;ssl=1" loading="lazy" class="aligncenter wp-image-795 size-full" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/logo_calculator.png?resize=128%2C128" alt="" width="128" height="128" data-recalc-dims="1" /></p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://lh3.googleusercontent.com/R-ddc4GC0a9OO8JL1XMXd-5cCzZb7sAcTOe8H-qhm9tzVoQ4DzYZZafIWmZwmJFf7DjZS2HnZ_kJWxVQiruffTwSaw=s128-rj-sc0x00ffffff" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://chrome.google.com/webstore/detail/%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E9%9B%BB%E5%8D%93%E6%A9%9F-simple-calculator/dlaggloabkagldkpfckkejkhjhcimkih?hl=ja&gl=JP">シンプル電卓機 Simple Calculator - Chrome ウェブストア</a>
			</p>
							<div class="ys-blog-card__dscr">
					電卓として使うことができます。ちょっとした計算や確認がすぐに実行できて便利です。				</div>
										<div class="ys-blog-card__domain">chrome.google.com</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/chrome-calculator/">Vue.jsでChrome拡張機能開発してみた【シンプル電卓】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/chrome-calculator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">793</post-id>	</item>
		<item>
		<title>【Chrome拡張機能】シンプルなToDoリスト・メモ帳を開発してみた</title>
		<link>https://mintaku-blog.net/chrome-todolist/</link>
					<comments>https://mintaku-blog.net/chrome-todolist/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 30 Dec 2018 04:45:46 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[個人開発]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=766</guid>

					<description><![CDATA[<p>個人的に開発して使っていたToDoリストをたくさんの方に使ってもらうにはどうしたらよいかと考えた結果、Chromeの拡張機能として提供しようと思い至りました …</p>
The post <a href="https://mintaku-blog.net/chrome-todolist/">【Chrome拡張機能】シンプルなToDoリスト・メモ帳を開発してみた</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>個人的に開発して使っていたToDoリストをたくさんの方に使ってもらうにはどうしたらよいかと考えた結果、Chromeの拡張機能として提供しようと思い至りました。</p>
<p>元々はサーバサイドをPHPで書いていたので、JSに書き直してChrome拡張機能で使えるようにしました。</p>
<h2>Chrome拡張機能「Simple ToDo List」を開発してみた</h2>
<p><img data-attachment-id="775" data-permalink="https://mintaku-blog.net/chrome-todolist/simple_todo_logo/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=500%2C500&amp;ssl=1" data-orig-size="500,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="simple_todo_logo" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=300%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=500%2C500&amp;ssl=1" loading="lazy" class="aligncenter wp-image-775 size-medium" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo-300x300.png?resize=300%2C300" alt="" width="300" height="300" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?w=500&amp;ssl=1 500w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /></p>
<h3>「Simple ToDo List」の概要</h3>
<p>やることをシンプルに管理できるToDoリスト。</p>
<p>簡易的なメモ帳としても使うことができます。入力するだけで保存できたり、優先順位を変更したり、ワンクリックで削除できます。</p>
<p>&nbsp;</p>
<p>「Simple ToDo List」のChrome追加はこちら。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://lh3.googleusercontent.com/3gVO7yektJq5v1-YpFLzz9KY9JgvqpFC7MxebiID1M-Xv13NdsnLq48MYci2quhWVOGqba9C3RxfIgeI_bJBlzPiXoA=s128-rj-sc0x00ffffff" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://chrome.google.com/webstore/detail/simple-todo-list/jnaoknjcfadocekoodfgdpjkkopahjkj?hl=ja&gl=JP">Simple ToDo List - Chrome ウェブストア</a>
			</p>
							<div class="ys-blog-card__dscr">
					やることをシンプルに管理できるToDoリスト。簡易的なメモ帳としても使うことがで&hellip;				</div>
										<div class="ys-blog-card__domain">chrome.google.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<h2>「Simple ToDo List」の使い方</h2>
<p><img data-attachment-id="771" data-permalink="https://mintaku-blog.net/chrome-todolist/todo_screenshot1/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?fit=1280%2C800&amp;ssl=1" data-orig-size="1280,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="todo_screenshot1" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?fit=300%2C188&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?fit=800%2C500&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-771" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1-1024x640.png?resize=800%2C500" alt="" width="800" height="500" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?resize=1024%2C640&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?resize=768%2C480&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot1.png?w=1280&amp;ssl=1 1280w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>＋(追加ボタン)を押下して、タスクを生成します。</p>
<p>&nbsp;</p>
<p><img data-attachment-id="772" data-permalink="https://mintaku-blog.net/chrome-todolist/todo_screenshot2/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?fit=1280%2C800&amp;ssl=1" data-orig-size="1280,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="todo_screenshot2" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?fit=300%2C188&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?fit=800%2C500&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-772" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2-1024x640.png?resize=800%2C500" alt="" width="800" height="500" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?resize=1024%2C640&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?resize=768%2C480&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot2.png?w=1280&amp;ssl=1 1280w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>タスクを入力します。タスクの内容は入力する段階で保存されます。</p>
<p>&nbsp;</p>
<p><img data-attachment-id="773" data-permalink="https://mintaku-blog.net/chrome-todolist/todo_screenshot3/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?fit=1280%2C800&amp;ssl=1" data-orig-size="1280,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="todo_screenshot3" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?fit=300%2C188&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?fit=800%2C500&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-773" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3-1024x640.png?resize=800%2C500" alt="" width="800" height="500" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?resize=1024%2C640&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?resize=768%2C480&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot3.png?w=1280&amp;ssl=1 1280w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>タスクの優先順位を変更する場合は、↑↓ボタンを押下します。</p>
<p>&nbsp;</p>
<p><img data-attachment-id="774" data-permalink="https://mintaku-blog.net/chrome-todolist/todo_screenshot4/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?fit=1280%2C800&amp;ssl=1" data-orig-size="1280,800" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="todo_screenshot4" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?fit=300%2C188&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?fit=800%2C500&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-774" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4-1024x640.png?resize=800%2C500" alt="" width="800" height="500" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?resize=1024%2C640&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?resize=768%2C480&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/todo_screenshot4.png?w=1280&amp;ssl=1 1280w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>タスクを削除する場合は、ゴミ箱マークをクリックします。(削除時に確認ダイアログは出ないので注意)</p>
<p>&nbsp;</p>
<h2>Chrome拡張機能のDBってどうなってるの？</h2>
<p>Chrome拡張機能開発をしようと思った時に疑問に思ったのがDBってどうなってるんだろう？ということです。ということでChrome拡張機能のDBを調べてみました。</p>
<h3>sync</h3>
<p>Chromeにより同期されるストレージエリアです</p>
<p>Chromeにログインしていれば、どのパソコンからでもアクセスすることができます。</p>
<h3>local</h3>
<p>ブラウザ内に閉じたストレージエリアです.</p>
<p>パソコン単位で保存しているため、例えログインアカウントが一緒でも異なるパソコンからではアクセスできません。</p>
<h3>managed</h3>
<p>ドメイン管理者によって設定され、読み取り専用のストレージエリアです。</p>
<p>&nbsp;</p>
<p>以上の3つが、Chrome拡張機能のDB(ストレージエリア)となっています。詳しくはこちらの公式サイトに記載されています。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://developer.chrome.com/extensions/api_index">API reference &nbsp;|&nbsp; Chrome for Developers</a>
			</p>
							<div class="ys-blog-card__dscr">
					The complete reference to all APIs made &hellip;				</div>
										<div class="ys-blog-card__domain">developer.chrome.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<p>本拡張機能では制限の少ないlocalを使用しました。</p>
<p>localストレージ内を全て削除する場合は</p><pre class="crayon-plain-tag">chrome.storage.local.clear();</pre><p>localストレージ内に登録する場合は</p><pre class="crayon-plain-tag">chrome.storage.local.set();</pre><p>localストレージ内から取り出す場合は</p><pre class="crayon-plain-tag">chrome.storage.local.get();</pre><p>以上でlocalストレージエリアを操作することができます。</p>
<p>本拡張機能が呼び出された際に、ストレージに格納されているデータが入ったDOMを生成します。</p><pre class="crayon-plain-tag">chrome.storage.local.get(function(items) {
    if (items !== undefined) {
        $.each(items, function (index, elm) {
...
        // DOM生成処理
...
        });
    }
});</pre><p>タスクの登録処理は以下のように行なっています。</p><pre class="crayon-plain-tag">// タスク登録処理
$(".smoothswap_form").each(function(i, elm){
    var $content = { content : $(elm).find('*[name=content]').val() };
    chrome.storage.local.set({[i]: $content}, function() {
        console.log('content stored');
    });
});</pre><p>&nbsp;</p>
<h2>Chrome拡張機能を登録するのに必須なマニフェストファイルの書き方</h2>
<p>Chrome拡張機能を登録するのに必須なマニフェストファイルの書き方をまとめておきます。</p>
<p>マニフェストファイルには、拡張機能名や説明文、アイコン画像などの設定を記述します。</p>
<h3>manifest_version</h3>
<p>マニフェストファイルのバージョンを示しています。最新版は2なため、2を使用しています。</p>
<h3>version</h3>
<p>拡張機能のバージョンを示しています。1から4つまでの数値で区切ることができます。</p>
<p>また、拡張機能を更新する際には必ずバージョンが上がってなくてはなりません。</p>
<h3>name</h3>
<p>提供する拡張機能の名称です。45文字までですが、short_nameで略称を定義することもできます。</p>
<h3>description</h3>
<p>拡張機能を紹介する説明文です。132文字までです。</p>
<h3>browser_action</h3>
<p>・default_icon</p>
<p>アドレスバーの右に表示するアイコンを指定します。サイズは19pxが推奨されます。Retina用に38ピクセルのアイコンも用意しておきます。</p>
<p>・default_title</p>
<p>アドレスバーの右に表示するアイコンにカーソルをかざした時に表示されるツールチップです。省略するとname が使われます。</p>
<p>・default_popup</p>
<p>アドレスバーの右に表示するアイコンをクリックした時にに表示されるポップアップのHTMLファイルを指定します。</p>
<h3>icons</h3>
<p>拡張機能のアイコンです。Chrome Web Storeやファビコンなどに使われます。また、画像の形式はpngが推奨されています。</p>
<h3>permissions</h3>
<p>特定のAPIを使うためにあらかじめ設定する必要があります。</p>
<p>どんなAPIがあるのかは以下から確認できます。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://developer.chrome.com/extensions/declare_permissions">Declare permissions &nbsp;|&nbsp; Chrome Extensions &nbsp;|&nbsp; Chrome for Developers</a>
			</p>
							<div class="ys-blog-card__dscr">
					An overview of the valid values for the &hellip;				</div>
										<div class="ys-blog-card__domain">developer.chrome.com</div>
					</div>
	</div>
</div>

<p>以上を踏まえた上で、本拡張機能のマニフェストファイルは以下のようになりました。</p><pre class="crayon-plain-tag">{
    "manifest_version": 2,
    "version": "1.0.0",
    "name": "Simple ToDo List",
    "description": "やることをシンプルに管理できるToDoリスト。簡易的なメモ帳としても使うことができます。入力するだけで保存できたり、タスクの優先順位を変更したり、ワンクリックで削除できます。",
    "browser_action": {
        "default_icon": {
            "19": "images/icon/19.png",
            "38": "images/icon/38.png"
        },
        "default_title": "Simple ToDo List",
        "default_popup": "index.html"
    },
    "icons":{
        "16": "images/icon/16.png",
        "48": "images/icon/48.png",
        "128": "images/icon/128.png"
    },
    "permissions": [
        "storage"
    ]
}</pre><p>以上で、Chrome拡張機能の登録準備は完了です。</p>
<p>あとは、<a href="https://chrome.google.com/webstore/category/extensions" target="_blank" rel="noopener">Chrome ウェブストア</a>からデベロッパーダッシュボードにアクセスし、登録手続きをするだけです。最初に登録する場合は5$払ってデベロッパー登録する必要があります。</p>
<p>具体的な手順は以下の記事が参考になりました。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjQ4OTglMkZwcm9maWxlLWltYWdlcyUyRjE1MTM4MzA4MjE_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPTg1NzA0NmU4ZTY0YTg4YjQyOTZkNmFlMjk3YzdkMzI4%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3D1e20cf52a071f8c8536e351f36dafba9?ixlib=rb-4.0.0&amp;w=1200&amp;fm=jpg&amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUU4JUI2JTg1JUU2JTlDJTgwJUU0JUJEJThFJUU5JTk5JTkwJUUzJTgxJUFFJTIwQ2hyb21lJTIwJUUzJTgyJUE4JUUzJTgyJUFGJUUzJTgyJUI5JUUzJTgzJTg2JUUzJTgzJUIzJUUzJTgyJUI3JUUzJTgzJUE3JUUzJTgzJUIzJUUzJTgyJTkyJUU5JTk2JThCJUU3JTk5JUJBJUUzJTgxJTk3JUUzJTgyJUE2JUUzJTgyJUE3JUUzJTgzJTk2JUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgyJUEyJUUzJTgxJUE3JUU1JTg1JUFDJUU5JTk2JThCJUUzJTgxJTk5JUUzJTgyJThCJUUzJTgxJUJFJUUzJTgxJUE3JUUzJTgxJUFFJUU2JTg5JThCJUU5JUEwJTg2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9YTJhODYwNjhkOTZkNGExZDBlZjUwYzdhNzFkNDUzY2E&amp;mark-x=120&amp;mark-y=112&amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBvdGNoeSZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPWJkNjU1MzY1NzQ4ZDUyNGJlZWE1NzIxYTVkYWU2NTll&amp;blend-x=242&amp;blend-y=480&amp;blend-w=838&amp;blend-h=46&amp;blend-fit=crop&amp;blend-crop=left%2Cbottom&amp;blend-mode=normal&amp;s=fb637eb659323df5f44e8d03ae36bf42" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://qiita.com/otchy/items/e29bf2e377c5b7ddc2f7">超最低限の Chrome エクステンションを開発しウェブストアで公開するまでの手順 #JavaScript - Qiita</a>
			</p>
							<div class="ys-blog-card__dscr">
					つい最近、初めて作った Google Chrome エクステンション「Feedl&hellip;				</div>
										<div class="ys-blog-card__domain">qiita.com</div>
					</div>
	</div>
</div>

<p>&nbsp;</p>
<p>思った以上に簡単にできるので、また何か思いついたら作って登録してみようと思います。</p>
<p><img data-attachment-id="775" data-permalink="https://mintaku-blog.net/chrome-todolist/simple_todo_logo/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=500%2C500&amp;ssl=1" data-orig-size="500,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="simple_todo_logo" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=300%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?fit=500%2C500&amp;ssl=1" loading="lazy" class="aligncenter wp-image-775 size-thumbnail" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo-150x150.png?resize=150%2C150" alt="" width="150" height="150" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/simple_todo_logo.png?w=500&amp;ssl=1 500w" sizes="(max-width: 150px) 100vw, 150px" data-recalc-dims="1" /></p>
<p>「Simple ToDo List」のChrome拡張機能追加はこちら。よかったら使ってみてください。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://lh3.googleusercontent.com/3gVO7yektJq5v1-YpFLzz9KY9JgvqpFC7MxebiID1M-Xv13NdsnLq48MYci2quhWVOGqba9C3RxfIgeI_bJBlzPiXoA=s128-rj-sc0x00ffffff" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://chrome.google.com/webstore/detail/simple-todo-list/jnaoknjcfadocekoodfgdpjkkopahjkj?hl=ja&gl=JP">Simple ToDo List - Chrome ウェブストア</a>
			</p>
							<div class="ys-blog-card__dscr">
					やることをシンプルに管理できるToDoリスト。簡易的なメモ帳としても使うことがで&hellip;				</div>
										<div class="ys-blog-card__domain">chrome.google.com</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/chrome-todolist/">【Chrome拡張機能】シンプルなToDoリスト・メモ帳を開発してみた</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/chrome-todolist/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">766</post-id>	</item>
	</channel>
</rss>
