tag:crieit.net,2005:https://crieit.net/users/morix1500/feed
MorixðªðŒâšã®æçš¿ - Crieit
Crieitã§ãŠãŒã¶ãŒMorixðªðŒâšã«ããæè¿ã®æçš¿
2019-02-22T20:59:57+09:00
https://crieit.net/users/morix1500/feed
tag:crieit.net,2005:PublicArticle/14626
2018-12-05T09:08:01+09:00
2019-02-22T20:59:57+09:00
https://crieit.net/posts/e9c4b7e76be1f900445bac2c52af1cbd
ãªãã¹ããéããããå人éçºãããŠããã«ã¯
<p>ãã¡ãã¯<a href="https://crieit.net">Crieit</a>ã®<a href="https://crieit.net/advent-calendars/2018/crieit">ã¢ããã³ãã«ã¬ã³ã㌠Advent Calendar 2018</a>ã®5æ¥ç®ã®èšäºã§ãã</p>
<p>èªåã¯çµå©ããŠãããŸããŠçŸåšãå°é£ãå¶ã§ãã<br />
ç¬èº«æ代ãšæ¯èŒãããšèªç±ã«äœ¿ãããéããããªã«å€ããããŸããã</p>
<p>ãããªäžãå人ã§WebãµãŒãã¹ãäœããšããã®ã趣å³ã«ããŠãŸãã<br />
WebãµãŒãã¹ãäœãããã«ã¯ãéãè²ã
ãããããã§ãã</p>
<ul>
<li>ãµãŒããŒ</li>
<li>ãã¡ã€ã³</li>
<li>çŽ æ</li>
</ul>
<p>ããã§<strong>ããã«ãéããããã«å人éçºãããŠããã</strong>ãèããªããéçºããŠããŸãã<br />
ãã®ããŠããŠããã®èšäºã§æžããŠãããããšæããŸãã</p>
<h2 id="ãµãŒããŒ"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC">ãµãŒããŒ</a></h2>
<p>äœã£ãWebãµãŒãã¹ãåããããã®åºç€ãå¿
èŠã«ãªãããã§ãããããçµæ§ãéãããããã€ã³ããããªãã§ããããã<br />
ãããã®VPSãConohaã䜿ãã®ãæåã«æãã€ããšæãã®ã§ãããããã¯æé¡å¶ã§ãã<br />
æã£ãŠãããé以äžè«æ±ãæ¥ãªããšããã®ã¯ãããå®å¿æãããé
åçã§ãã</p>
<p>ãã èªåã®å Žåããã«ãéãããŸããããããªãã§ãããã®ãããã±ãã§ãã»ã»ã»</p>
<p>ãšããããšã§Saasãªã©ãããŸã䜿ã£ãŠãéãæäœéãããããªãããã«ããŠãŸãã</p>
<h3 id="SaaS/PaaS/MBaaSãããŸã䜿ã"><a href="#SaaS%2FPaaS%2FMBaaS%E3%82%92%E3%81%86%E3%81%BE%E3%81%8F%E4%BD%BF%E3%81%86">SaaS/PaaS/MBaaSãããŸã䜿ã</a></h3>
<p>WebãµãŒãã¹ãäœããšãªããš</p>
<ul>
<li>Webã¢ããªãåããããã«WebãµãŒããŒãå¿
èŠ</li>
<li>APIãåããããã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãå¿
èŠ</li>
<li>DBãåããããã«DBãµãŒããŒãå¿
èŠ</li>
</ul>
<p>ãšããããªãµãŒããŒãå¿
èŠã«ãªããŸãããéçšã楜ã«ãããªãããããåé·åãããããšããã§ãã<br />
ãšãªããšããããéããããã®ã§èªåã§ã€ã³ãã©ã¯çšæããããªãã§ãã</p>
<p>ãšããããšã§ããããã®ã¯Saas/PaaS/MBaaSã䜿ã£ãŠç¡ææ ãé§äœ¿ããŸãã</p>
<h4 id="Webãã¹ãã£ã³ã°"><a href="#Web%E3%83%9B%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">Webãã¹ãã£ã³ã°</a></h4>
<p>SPAãåæãšããŸãããhtml/css/JavaScriptã¯éçãã¡ã€ã«ã§ãã<br />
æè¿ã¯ç¡æã§éçãã¡ã€ã«ããã¹ãã£ã³ã°ã§ãããšãããå¢ããŠããŠããŸãã</p>
<ul>
<li>Netlify</li>
<li>GItHub Pages</li>
<li>Firebase Hosting</li>
</ul>
<p>ãã®ä»ã«ã¯AWS S3ã§ãWebãã¹ãã£ã³ã°ã§ããã®ã§å®ãæžãŸããããšãåºæ¥ãŸãã</p>
<p>ãŸããããã¯HTTPSã«å¿
èŠãªèšŒææžãç¡æã§çºè¡ããŠãããŸãã<br />
ä»æã§ããã°å¿
ãHTTPS察å¿ããŠããããã®ã§ãããã¯å¬ãããLet's EncryptããŸããŸã§ãïŒ<br />
ïŒS3ã§ããã°Cloud Frontã䜿ã£ãŠHTTPS察å¿ããå¿
èŠããããŸããïŒ</p>
<h4 id="APIãDB"><a href="#API%E3%82%84DB">APIãDB</a></h4>
<p>ãã©ãŠã¶ããã¯çŽæ¥å©ããªããã®ãããã¯ãšã³ãã®APIããå©ããããšã<br />
æ
å ±ãDBã«ä¿åããããšããèŠä»¶ã¯å¿
ãããã§ãããã</p>
<p>ããã¯FirebaseãHerokuãšãã£ãMBaasãPassã®ç¡ææ ã䜿ãããšãåºæ¥ãŸãã</p>
<ul>
<li>Firebase
<ul>
<li>èªèšŒ/API/DB/ã¹ãã¬ãŒãžãšå
šéšæã£ãŠã</li>
<li>DBã¯NoSQLãªã®ã§èŠä»¶ã«ãã£ãã䜿ããšãã</li>
<li>ç¡æãã©ã³ããã</li>
</ul></li>
<li>Heroku
<ul>
<li>Railsãªã©ã®Webã¢ããªã±ãŒã·ã§ã³çœ®ãã</li>
<li>MySQLãRedisãç¡æã§äœ¿ããïŒå¶éããã€ããã©ïŒ</li>
</ul></li>
</ul>
<p>ãã¡ããFirebaseãšHerokuãçµã¿åãããŠäœ¿ãããšãåºæ¥ãã®ã§ããããã§ãã</p>
<p>ã¡ãªã¿ã«ãªãã§ããããããã€ã³ãã©ãèããªããŠè¯ããµãŒãã¹ãäœã£ãŠããš<strong>ç£èŠãæäœéã§æžã¿ãŸã</strong>ã<br />
Firebaseèµ·å ã®é害ã§ãªãéãèœã¡ããã¯ããªãã®ã§ïŒ<br />
ç£èŠããããå Žåã¯ã¡ããªã¯ã¹ã®ä¿ææéã®å°ãªããå¶éãå€ãã§ãã<a target="_blank" rel="nofollow noopener" href="https://mackerel.io/ja/">Mackerel</a>ãããªãŒãã©ã³ãããã®ã§ããã䜿ããŸãã</p>
<h4 id="ã¹ãã¬ãŒãž"><a href="#%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8">ã¹ãã¬ãŒãž</a></h4>
<p>ç»åãåç»ãä¿åããããªããšæããŸããããããæè¿ã¯åŸé課éããã®ç¡ææ ã§äœ¿ãããšãåºæ¥ãŸãã</p>
<ul>
<li>AWS S3</li>
<li>Firebase Storage</li>
<li>Cloud Storage</li>
</ul>
<h2 id="ãã¡ã€ã³"><a href="#%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3">ãã¡ã€ã³</a></h2>
<p>WebãµãŒãã¹ãå
¬éããããã«ã¯ã§ããã°<strong>ç¬èªãã¡ã€ã³</strong>ãã»ãããšããã§ãã<br />
ãã Webãã¹ãã£ã³ã°ã§ãããµãŒãã¹ã¯ã ãããããã®ç¡æãã¡ã€ã³ãæäŸããŠãããã®ã§ããéãã±ããããã£ããããã䜿ã£ãŠããããšæããŸãã</p>
<h3 id="ãµããã¡ã€ã³ããµãŒãã¹ã®ãã¡ã€ã³ã«ãã"><a href="#%E3%82%B5%E3%83%96%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%AB%E3%81%99%E3%82%8B">ãµããã¡ã€ã³ããµãŒãã¹ã®ãã¡ã€ã³ã«ãã</a></h3>
<p>ãã£ããèªåã®WebãµãŒãã¹ãäœã£ããã ãããã©ãããªãã€ã±ãŠããã¡ã€ã³ã«ãããã§ãããïŒ<br />
<a target="_blank" rel="nofollow noopener" href="https://kibe.la/ja">Kibela</a>ã¯ãkibe.laããšãããã¡ã€ã³ã§éåžžã«çŸããã§ãã»ã»ã»</p>
<p>ãã ãã¡ã€ã³ãååŸããã«ã¯ãéãããããŸãã<br />
1ãã¡ã€ã³ãå®ããŠã幎é1,000åååŸã¯ãããããããªãã§ããããïŒã»ãŒã«ã¯ãããŸããïŒïŒ</p>
<p>ããã1åè²·ã£ãŠçµãããããªããæ¯å¹Žè«æ±ãããŸãã<br />
1ãµãŒãã¹ã ã£ãããããããããŸããããäœåãäœååãäœã£ãŠãããšçµæ§ãªé¡ã«ãªããŸãã</p>
<p>ããã§èªåã¯ã<strong>äœã£ããµãŒãã¹ã¯ã»ãšãã©ãµããã¡ã€ã³ã«ããŠãŸãã</strong></p>
<ul>
<li>nyaaan.haramishio.xyz</li>
<li>markdowntable.haramishio.xyz</li>
<li>blog.haramishio.xyz</li>
<li>trash.haramishio.xyz</li>
</ul>
<p>ãªã·ã£ã¬æã¯ãããŸãããã1ãã¡ã€ã³åã®ãéããæããªããŠããã®ã§å®ãæžã¿ãŸãã</p>
<p>ãŸããµããã¡ã€ã³æŠç¥ã¯ä»ã«ãã¡ãªããããããŸãã</p>
<h4 id="ãµããã¡ã€ã³ã ãšåºåãåºãã®ã楜"><a href="#%E3%82%B5%E3%83%96%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A0%E3%81%A8%E5%BA%83%E5%91%8A%E3%82%92%E5%87%BA%E3%81%99%E3%81%AE%E3%81%8C%E6%A5%BD">ãµããã¡ã€ã³ã ãšåºåãåºãã®ã楜</a></h4>
<p>以äžã®å
容ã¯ééãã§ãäžåã«ãŒããã¡ã€ã³ã§å¯©æ»éãã°å¥ãã¡ã€ã³ã§ãåºååºããã¿ããã§ãã</p>
<p>Google Adsenseã§åºåãåºãã®ã¯äžè¬çãããªãããªãšæã£ãŠãã®ã§ããã<br />
Adsenseã¯<strong>ãã®ãã¡ã€ã³ã§åºåãåºãèš±å¯ãããã£ããããã®ãµããã¡ã€ã³ãã¹ãŠã§åºåãèŒããããšãåºæ¥ãŸãã</strong></p>
<p>åã®å Žåã¯ããã®ããã°ã®ãã¡ã€ã³ã§åºåãåºãèš±å¯ãããã£ãã®ã§ãã®ä»ã®ãµããã¡ã€ã³ã§åºåãèŒããããããã«ãªããŸããã<br />
1ã€1ã€ã®ãµãŒãã¹ã§ãã¡ã€ã³ãåã£ãŠãããšæ¯ååºåãåºãç³è«ïŒçµæ§ããŒãã«é«ãïŒãããªããšãããªãã®ã§å€§å€ã§ãã</p>
<h2 id="çŽ æ"><a href="#%E7%B4%A0%E6%9D%90">çŽ æ</a></h2>
<p>WebãµãŒãã¹ãäœã£ãŠããšãã©ãããŠãã€ã©ã¹ããããŽãªã©çŽ æãå¿
èŠã«ãªããŸãã<br />
åã¯çµµãæžãã¹ãã«ãçç¡ãªã®ã§ããªãŒçŽ æã§ã©ãã«ãããŠããŸãã</p>
<h3 id="ããŽ"><a href="#%E3%83%AD%E3%82%B4">ããŽ</a></h3>
<p>ãµãŒãã¹ã®ããŽã¯<strong>ããªãŒã€ã©ã¹ã</strong>ãš<strong>ããªãŒãã©ã³ã</strong>ã§äœã£ãŠãŸãã<br />
ããªãŒãã©ã³ãã§ããã®ãªãããªãŒãšæ¢ããšãã«äŸ¿å©ãªã®ã<a target="_blank" rel="nofollow noopener" href="https://tameshigaki.jp/">ããããã</a>ã§ãã</p>
<p>ããã§è¯ããããªãã©ã³ããèŠã€ããããGimpã«å
¥ããŠããŽãäœã£ãŠãŸãã</p>
<h3 id="çŽ æ"><a href="#%E7%B4%A0%E6%9D%90">çŽ æ</a></h3>
<p>ããªãŒã®ã€ã©ã¹ãã¯ãããªãŒ ã€ã©ã¹ã ââãã§ã²ããã£ããã®ã䜿ã£ãŠãŸãã<br />
ç¹ã«ããïŒã£ãŠãããµã€ãã¯ãªãã§ããããããããšããã¯ãªãã¹ã䜿ããªãããã«ããŠãŸãã</p>
<p>ãªãããšãããšãããããšãã®ã€ã©ã¹ãã®äžç芳ã匷ãããŠããŸããµãŒãã¹ã«ãããããªããšããå€ãããã§ãã</p>
<h2 id="éçšæ¹é"><a href="#%E9%81%8B%E7%94%A8%E6%96%B9%E9%87%9D">éçšæ¹é</a></h2>
<p>å人ã§éçºã»éçšããŠãŸãã®ã§ããçšåºŠã俺ã«ãŒã«ãã䜿ãããšæã£ãŠããŸãã</p>
<p>ãªã®ã§ãçŸåšFirebaseãåŸé課éãã©ã³ã§äœ¿ãããšãå€ãã®ã§ãã<br />
ãããã©ãã£ãã¯ãå€ããªãå€é¡ã®è«æ±ãæ¥ããã«ãªã£ãã<span style="color: #ff0000"><strong>ãµãŒãã¹ãæ¢ãããšæããŸã</strong></span><br />
ããããå²ãåããè¡ããã®ãå人éçºã®ãããšããã ãšæããŸãã</p>
<p>ãã æ°žä¹
ééãšããããã§ã¯ãªããå©çãåããããããã¿ã€ãºãèããäžã§ã€ã³ãã©ããã¡ã£ãšæŽãããã®ã§ãŸãåºããã°ãšæã£ãŠãŸãã<br />
ãããªæ©äŒããã®ãããããŸãããïœ</p>
<h2 id="æåŸã«"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">æåŸã«</a></h2>
<p>ãšããããšã§ããªãã¹ããéããããã«å人éçºãããŠããã«ã¯ãšããã話ãããŸããã<br />
æããã¯ã ãã¶å®ãæžãŸããããã®ãµãŒãã¹ãåºãŠããã®ã§ãããæ代ã«ãªããŸããã</p>
<p>åãããã«ãéãããŸããããããªãã»ã»ã»ã£ãŠäººã¯ãã²åèã«ããŠããã ãã°ãšæããŸãïŒ</p>
<hr />
<p>ã¡ãªã¿ã«ãªãã§ãããçŸåš4ãµãŒãã¹éå¶ããŠãããŸããŠ<br />
ãã®ãµãŒããŒè²»çšããã¡ã€ã³è²»çšåãã㊠<span style="color: #ff0000"><strong>æ¯æ200åããã</strong></span>ã§ãã<br />
ã»ãŒãã¡ã€ã³è²»çšãšDNSãµãŒããŒè²»çšã§ãã</p>
<hr />
<p>次åã¯<a target="_blank" rel="nofollow noopener" href="https://twitter.com/goodengineer7">Sãã</a>ã§ããã楜ãã¿ã«ïŒ</p>
MorixðªðŒâš
tag:crieit.net,2005:PublicArticle/14619
2018-12-02T08:57:46+09:00
2018-12-03T08:12:55+09:00
https://crieit.net/posts/Nyaaan
Nyaaanãæ¯ããæè¡
<p>ãã¡ãã¯<a href="https://crieit.net">Crieit</a>ã®<a href="https://crieit.net/advent-calendars/2018/technology">å人éçºãµãŒãã¹ã«çšããããŠããæè¡ Advent Calendar 2018</a>ã®2æ¥ç®ã®èšäºã§ãã<br />
åæ¥ã¯<a target="_blank" rel="nofollow noopener" href="https://twitter.com/nabettu">ãªã¹</a>ããã®<a href="https://crieit.net/posts/9a531cc77a86bfec6a0ad932dac69b56">æ¥æ¬èªã®ããªãŒãã©ã³ããäžåºŠã«è©Šãããããããããã«çšããããŠããæè¡ã«ã€ããŠ</a>ã§ããïŒ</p>
<hr />
<p>11/5ã«<a target="_blank" rel="nofollow noopener" href="https://nyaaan.haramishio.xyz/">Nyaaan</a>ãšããWebãµãŒãã¹ããªãªãŒã¹ããŸããã</p>
<p>ããã§</p>
<ul>
<li>ã©ã®ãããªæè¡ã䜿ã£ãŠãã®ã</li>
<li>ã©ãããç¥èŠãåŸãããã®ã</li>
</ul>
<p>ãæžããŠããããšæããŸãïŒ</p>
<p>ã©ããããµãŒãã¹ãã¯ä»¥äžã®èšäºãèªãã§ããã ããããšæããŸãïŒ</p>
<p><a target="_blank" rel="nofollow noopener" href="https://blog.haramishio.xyz/entry/service-nyaaan">https://blog.haramishio.xyz/entry/service-nyaaan</a></p>
<h2 id="䜿çšããŠããæè¡"><a href="#%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E6%8A%80%E8%A1%93">䜿çšããŠããæè¡</a></h2>
<p>ãã£ãããªæ§æã§ãããš</p>
<ul>
<li>ããã³ããšã³ã
<ul>
<li>Nuxt.js</li>
</ul></li>
<li>Webãã¹ãã£ã³ã°
<ul>
<li>Netlify</li>
</ul></li>
<li>ããã¯ãšã³ã
<ul>
<li>Firebase</li>
</ul></li>
</ul>
<p>ã§ãã</p>
<h3 id="Nuxt.js"><a href="#Nuxt.js">Nuxt.js</a></h3>
<p>Nuxt.jsã¯Vue.jsã¢ããªã±ãŒã·ã§ã³ãäœãããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã<br />
ã¡ãã£ãšå€§ããã®Vue.jsã¢ããªãäœãéã«å¿
èŠãªVuexãVue Routerãªã©ãå
¥ã£ãŠãã®ã§Nuxtãã€ã³ã¹ããŒã«ããã°ããã«Webã¢ããªãäœããŸãã<br />
ä»åã¯SSRïŒãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒãè¡ããªãããã<strong>SPAã¢ãŒã</strong>ã§å©çšããŠããŸãã</p>
<h3 id="Netlify"><a href="#Netlify">Netlify</a></h3>
<p>Webãã¹ãã£ã³ã°ã¯ããŸããŸãªçš®é¡ããããŸãããä»åã¯NetlifyãéžæããŸããã<br />
éžæããçç±ãšããŠã¯ã»ã»ã»</p>
<ul>
<li>ãã«ããåæã«ãã£ãŠãããïŒ<code>npm run build</code> ããã«ãã³ãã³ããïŒã£ãŠNetlifyã«ç»é²ããšãã ãã§ãã)</li>
<li>ãã«ãããããããã€ããã£ãŠããã</li>
<li>ä»ã®ãã¹ãã£ã³ã°ãµãŒãã¹ãšæ¯èŒããŠç¡ææ ã®å¶éãå°ãªã</li>
</ul>
<h3 id="Firebase"><a href="#Firebase">Firebase</a></h3>
<p>APIãDBãå¿
èŠã«ãªã£ãã®ã§ããããã¹ãŠFirebaseã§è¡ããŸããã<br />
äž»èŠãªFirebaseãµãŒãã¹ã¯HostingãšML Kit以å€äœ¿ããŸããã</p>
<p>ããããã®çšéãšããŠã¯ã»ã»ã»</p>
<ul>
<li>Authentication
<ul>
<li>TwitterèªèšŒã®ããå©çš</li>
</ul></li>
<li>Firestore
<ul>
<li>ãŠãŒã¶æçš¿ããŒã¿ããŠãŒã¶ããŒã¿ãä¿å</li>
</ul></li>
<li>Functions
<ul>
<li>Twitter APIã«åãåãããåŠçããŠãŒã¶åé€æ©èœã§å©çš</li>
</ul></li>
<li>Storage
<ul>
<li>ãŠãŒã¶ã®ã¢ã€ã³ã³ã®ä¿åã§å©çš</li>
</ul></li>
</ul>
<h2 id="åŸãããç¥èŠ"><a href="#%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E7%9F%A5%E8%A6%8B">åŸãããç¥èŠ</a></h2>
<h3 id="Firestoreã®ã¯ãšãªãŒã®ã¯ã»"><a href="#Firestore%E3%81%AE%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%BC%E3%81%AE%E3%82%AF%E3%82%BB">Firestoreã®ã¯ãšãªãŒã®ã¯ã»</a></h3>
<p>Firestoreã¯NoSQLã§ããRDBã®ãããªæè»ãªã¯ãšãªãŒãæžãããšã¯åºæ¥ãŸããã<br />
ãã®å¶éã«ã²ã£ããã£ãŠã¡ãã£ãšèŠããã äºäŸãããã®ã§å
±æããŸãã</p>
<p>Nyaaanã§ã¯ãæå¹æéããšããæ©èœããã<br />
ãããèšå®ãããš1æéãŸãã¯1æ¥çµã€ãšã鳎ã声ïŒã€ã¶ããã¿ãããªãã®ïŒãèŠããªããªããšãããã®ã§ãã</p>
<p>ãã®é³Žã声ããŒãã«ã¯ãããªæãã«ãªã£ãŠãŸãïŒæ¬åœã¯ãã£ãšã«ã©ã ãããŸãïŒ</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th>ã«ã©ã </th>
<th>å</th>
</tr>
</thead>
<tbody>
<tr>
<td>ID</td>
<td>string</td>
</tr>
<tr>
<td>鳎ã声</td>
<td>string</td>
</tr>
<tr>
<td>æ¬é³</td>
<td>string</td>
</tr>
<tr>
<td>æå¹æé</td>
<td>timestamp</td>
</tr>
<tr>
<td>äœææé</td>
<td>timestamp</td>
</tr>
</tbody>
</table></div>
<p>Nyaaanã«ã¯ã¿ã€ã ã©ã€ã³ãããã鳎ã声ã¯äœææéã®éé ã§ãœãŒããããã§ãã<br />
ãªã®ã§ã»ã»ã»</p>
<pre><code class="javascript">// ã«ã©ã åã¯ããããããæ¥æ¬èªã«ããŠãŸã
mewRef.where("æå¹æé", ">", now).orderBy("äœææé", "desc").limit(10).get()
</code></pre>
<p>ãšãããã£ãã®ã§ããããã¯NGã<br />
ç¯å²ãã£ã«ã¿(>ã>=)ã䜿ãå Žåã¯ãorderByã®æåã®èŠçŽ ã¯ãã®ç¯å²ãã£ã«ã¿ã§äœ¿çšããã«ã©ã ããæå®ã§ããŸããã<br />
<a target="_blank" rel="nofollow noopener" href="https://firebase.google.com/docs/firestore/query-data/order-limit-data?hl=ja">Cloud Firestore ã§ã®ããŒã¿ã®äžŠã¹æ¿ããšå¶é</a></p>
<p>RDBãªãããããã®ã¯æ®éã«ã§ããŸãããNoSQLã¯ããããå¶éãããã®ããšå匷ã«ãªããŸããã</p>
<p>çµå±ã©ãããããšãããšãåŸè¿°ãããããçãªãã®ã§æå¹æéããã§ãã¯ããŠåé€ããŠãŸãã</p>
<h3 id="Firebaseã§Cronçãªããšãããããšã"><a href="#Firebase%E3%81%A7Cron%E7%9A%84%E3%81%AA%E3%81%93%E3%81%A8%E3%82%92%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D">Firebaseã§Cronçãªããšãããããšã</a></h3>
<p>äžè¿°ãããããçãªãã®ã®è©±ã§ãã</p>
<p>ãµãŒãã¹ãäœã£ãŠãããšããããå¿
èŠã«ãªãå Žé¢ããããšããããŸãã<br />
ãªã«ãããã®åŠçãå®æçã«åãããšãªããšCronã䜿ã£ããJenkinsã䜿ã£ããè²ã
ãããšæããŸãã<br />
ãããã¯ãµãŒããŒãå¿
èŠã«ãªããŸãããã<br />
ãã§ã«æã£ãŠã人ã¯ããã䜿ãã°è¯ããã§ãããåã¯ãéããããããªãã®ã§ã©ãã«ãããŠãµãŒããŒã¬ã¹ã«ãããã§ãã</p>
<p>ããŠãFirebaseã®Functionsã¯HTTPSããã¯ã§èµ·åããããšãåºæ¥ãŸãã<br />
ã€ãŸãcronã§curlãå®æå®è¡ããã°ãããã¿ãããªããšãã§ããããã§ãïŒ</p>
<p>ãããŠäžã®äžã«ã¯å€åœ¢ç£èŠã®ããã«å®æçã«æå®ããURLãå©ããŠããããµãŒãã¹ããããŸãã<br />
<a target="_blank" rel="nofollow noopener" href="https://cron-job.org/en/">cron-job.org</a>ã<a target="_blank" rel="nofollow noopener" href="https://uptimerobot.com/">Uptime Robot</a>ãããã§ãã</p>
<p>ãããå©çšããŠFunctionsãå®æçã«ããªã¬ãŒããããã«ããŠãããåŠçããµãŒããŒã¬ã¹ã§å®çŸããŸããã</p>
<p>æžå¿µç¹ãšããŠãFunctionsã®å®è¡ãå€éšããã§ããããã«ããŠããŸã£ãŠããã®ã§ã»ãã¥ãªãã£çã«åé¡ãªãã®ãïŒãšããç¹ã§ãã<br />
ä»åã®å Žåã¯ãªã¯ãšã¹ãæã«GETãã©ã¡ãŒã¿ãŒã§ã¢ã¯ã»ã¹ããŒã¯ã³ãæž¡ããŠããããã®ã¢ã¯ã»ã¹ããŒã¯ã³ãããªããšã¢ã¯ã»ã¹æåŠããããã«ã³ãŒãã£ã³ã°ããŠããŸãã<br />
ããã§ãæ»æãããŠçªç Žããããªã¹ã¯ããªãã¯ãªãã®ã§ãã»ã³ã·ãã£ããªããšããããå Žåã¯ãããã»ãããããšæããŸãã</p>
<h3 id="Functionsã®æ§ã
ãªããªã¬ãŒ"><a href="#Functions%E3%81%AE%E6%A7%98%E3%80%85%E3%81%AA%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC">Functionsã®æ§ã
ãªããªã¬ãŒ</a></h3>
<p>Fucntionsã®ããªã¬ãŒã¯è²ã
ãããŸãã</p>
<div class="table-responsive"><table>
<thead>
<tr>
<th>ããªã¬ãŒ</th>
<th>å
容</th>
</tr>
</thead>
<tbody>
<tr>
<td>HTTPS</td>
<td>URLãå©ãã ã</td>
</tr>
<tr>
<td>onCall</td>
<td>ã¯ã©ã€ã¢ã³ãããçŽæ¥åŒã³åºã</td>
</tr>
<tr>
<td>Authentication</td>
<td>ãŠãŒã¶ã®ç»é²/åé€ã§åŒã³åºã</td>
</tr>
<tr>
<td>Firestore</td>
<td>ããã¥ã¡ã³ãã®ç»é²/æŽæ°/åé€ã§åŒã³åºã</td>
</tr>
<tr>
<td>Storage</td>
<td>ãªããžã§ã¯ãã®ç»é²/æŽæ°/åé€ã§åŒã³åºã</td>
</tr>
<tr>
<td>Pub/Sub</td>
<td>Cloud Pub/Subã®Publishã§åŒã³åºã</td>
</tr>
</tbody>
</table></div>
<p>Nyaaanã§ã¯HTTPSãšAuthenticationã®ããªã¬ãŒã䜿çšããŠãŸãã<br />
ç¹ã«Authenticationããªã¬ãŒã¯äŸ¿å©ã§ã以äžã®ããã«Functionsã«æžãã ãã§ç°¡åã«æžãããšãåºæ¥ãŸãã</p>
<pre><code class="javascript">// ãŠãŒã¶ãåé€ããããå®è¡ãããFunction
exports.removeUser = functions.region('asia-northeast1').auth.user().onDelete(function(user, context) {
~~~
});
</code></pre>
<p>Nyaaanã§ã¯ãŠãŒã¶åé€ããããšä»ãŸã§ã®é³Žã声ãæ¶ããããã«ãªã£ãŠãŸãã<br />
ã¯ã©ã€ã¢ã³ãã§ãããŸã§ãããšéãã®ã§ãã¯ã©ã€ã¢ã³ãã§ã¯Authenticationã®ãŠãŒã¶ã ãåé€ããŠã¬ã¹ãã³ã¹ãããè¿ãã<br />
Functionsã®Authenticationããªã¬ãŒã§éåæã§åé€åŠçãèµ°ãããŠãŸãã</p>
<h3 id="Netlifyã®ãªãã€ã¬ã¯ãèšå®"><a href="#Netlify%E3%81%AE%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E8%A8%AD%E5%AE%9A">Netlifyã®ãªãã€ã¬ã¯ãèšå®</a></h3>
<p>Nuxt.jsã®SPAã¢ãŒãã䜿çšããŠããŠãNetlifyã§ãã¹ãã£ã³ã°ããŠããã®ã§ãã<br />
ã«ãŒããã¹ä»¥å€ãçŽæ¥åŒã³åºããš404ãšã©ãŒã«ãªã£ãŠããŸããŸãã(äŸ: https://nyaaan.haramishio.xyz/top)</p>
<p>SPAã§ã¯ã«ãŒããã¹ä»¥å€ã§ã¢ã¯ã»ã¹ããããindex.htmlãžãªãã€ã¬ã¯ãåŠçãããå¿
èŠããããŸãã</p>
<p>Netlifyã¯ãªãã€ã¬ã¯ãã®æ©èœãããããããã€ãããã£ã¬ã¯ããªã®ãããã« <code>_redirects</code> ãé
眮ãããã«ãªãã€ã¬ã¯ãèšå®ãèšè¿°ãããšãªãã€ã¬ã¯ãããŠãããŸãã</p>
<pre><code>/* /index.html 200
</code></pre>
<p>ãã®è©±ãããã¡ããã¡ãããšèª¬æããã®ããã¡ãã®èšäºã«ãªããŸãã<br />
<a href="https://crieit.net/posts/Netlify-404">Netlifyã䜿ã£ãŠããã«ãŒããã¹ä»¥å€ã404ã«ãªã£ã話ãšãã®è§£æ±ºæ¹æ³</a></p>
<h2 id="æåŸã«"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">æåŸã«</a></h2>
<p>ãšããããšã§Nyaaanã®äœ¿çšæè¡ãšããããåŸãç¥èŠãæžããŸããïŒ<br />
ãã®èšäºã§ã¿ãªããã®éçºã®ãã³ãã«ãªããã°å¹žãã§ãïŒ</p>
<p>ããŠãææ¥ã¯ãã®ã¢ããã³ãã«ã¬ã³ããŒãéå¬ãããŠãã<a href="https://crieit.net">Crieit</a>ã®éå¶è
ã®<a target="_blank" rel="nofollow noopener" href="https://twitter.com/dala00">ã ã</a>ããã§ãïŒ</p>
MorixðªðŒâš
tag:crieit.net,2005:PublicArticle/14594
2018-11-06T09:50:13+09:00
2018-12-22T16:44:20+09:00
https://crieit.net/posts/Netlify-404
Netlifyã䜿ã£ãŠããã«ãŒããã¹ä»¥å€ã404ã«ãªã£ã話ãšãã®è§£æ±ºæ¹æ³
<p>å
æ¥ã<a target="_blank" rel="nofollow noopener" href="https://nyaaan.haramishio.xyz">Nyaaan</a>ããšããWebãµãŒãã¹ããªãªãŒã¹ããŸããã<br />
ãã®WebãµãŒãã¹ã¯ãNuxt.jsãã§äœãããŠããããNetlifyãã§Webãã¹ãã£ã³ã°ããŠããŸãã</p>
<p>Twitterã§ã·ã§ã¢ããŠæ¥œããã§ãããããšãåæãšããWebãµãŒãã¹ã§ãã®ã§ãTwitterCardã®ç»åã¯åºããªãŒãããã®ã«ã¯å€§åãªãã®ã§ãã<br />
ããã以äžã®ãããªè©³çŽ°ç»é¢ãªã©ãã«ãŒããã¹(index.htmlã«ãããããŒãž)以å€ã¯<strong>404</strong>ã«ã£ãŠããŸãçŸè±¡ã«ãªãã<br />
å®éURLã«ã¢ã¯ã»ã¹ãããšã¡ãããšç»é¢ã¯èŠãããã©ãTwitterã§ã¯TwitterCardã衚瀺ãããªããšããçŸè±¡ãèµ·ãããŸããã</p>
<p>ãã®åå ãšè§£æ±ºæ¹æ³ãèšèŒããŸãã</p>
<h2 id="åå "><a href="#%E5%8E%9F%E5%9B%A0">åå </a></h2>
<p>éåžžSPAãµã€ããäœãå Žåãã«ãŒããã¹ä»¥å€ã§ã¢ã¯ã»ã¹ãããå Žåã¯index.htmlã«ãªãã€ã¬ã¯ããããåŠçãæžããšæããŸãã<br />
èªåã¯404ããŒãžãçšæããŠãNuxt.jsã®èšå®ã§ãããŒãžãååšããªãå Žåã404ã衚瀺ããããšããèšå®ã<strong>å
ã«</strong>ãã£ãŠããŸããã</p>
<pre><code># SPA ãã©ãŒã«ããã¯
module.exports = {
generate: {
fallback: true, // '404.html' ã䜿çšãããå Žå
fallback: 'my-fallback/file.html' // ãã¹ãã£ã³ã°ãµãŒãã¹ã§ç¹å®ã®ãã±ãŒã·ã§ã³ãæå®ããå¿
èŠãããå Žå
}
}
</code></pre>
<p><a href="">https://ja.nuxtjs.org/guide/routing/</a></p>
<p>ãã®å¯Ÿå¿ãå
ã«ãã£ãããšã«ãããã«ãŒãã£ã³ã°ã¯ã¡ãããšè¡ããããã©<strong>404</strong>ã«ãªã£ãŠããŸãçŸè±¡ã«ãªããŸããã</p>
<h2 id="解決æ¹æ³"><a href="#%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95">解決æ¹æ³</a></h2>
<p>解決æ¹æ³ã¯ã<strong>Netlifyçšã®ãªãã€ã¬ã¯ãèšå®ãå
¥ããŠãããããš</strong>ã§ãã</p>
<blockquote>
<p>HISTORY PUSHSTATE AND SINGLE PAGE APPS åç
§<br />
<a href="">https://www.netlify.com/docs/redirects/#rewrites-and-proxying</a></p>
</blockquote>
<p>/static/_redirects ã«ä»¥äžã®å
容ãèšèŒã</p>
<pre><code>/* /index.html 200
</code></pre>
<p>ããã§ã«ãŒããã¹ä»¥å€ã¯index.htmlã«HTTPã¹ããŒã¿ã¹200ã§ãªãã€ã¬ã¯ããããŸãã<br />
fallbackã®èšå®ãå
¥ããŠãããªããã¹ãèŠã€ãããªãå Žåã404.htmlã«é·ç§»ããŸãã</p>
MorixðªðŒâš