<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shootacean</title>
    <description>The latest articles on DEV Community by Shootacean (@shootacean).</description>
    <link>https://dev.to/shootacean</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F183488%2Fd957dd70-bd43-41aa-bd77-5870cd71a44e.jpeg</url>
      <title>DEV Community: Shootacean</title>
      <link>https://dev.to/shootacean</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shootacean"/>
    <language>en</language>
    <item>
      <title>指定したURLのHTTPステータスを一括でチェックするPythonスクリプト</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Thu, 27 May 2021 14:35:14 +0000</pubDate>
      <link>https://dev.to/shootacean/url-http-python-4g75</link>
      <guid>https://dev.to/shootacean/url-http-python-4g75</guid>
      <description>&lt;p&gt;&lt;a href="https://gyazo.com/a1874c975d1c6d46cce071dc5a8be813"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cnTHJ5wo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/a1874c975d1c6d46cce071dc5a8be813.png" alt="Image from Gyazo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;こんにちは。shootaceanです。&lt;/p&gt;

&lt;p&gt;CSVファイルに定義したURLを元にGETリクエストを行い、レスポンスのHTTPステータスをチェックするPythonスクリプトです。&lt;/p&gt;

&lt;p&gt;運営しているWEBサービスの検証をする際に利用しました。&lt;/p&gt;

&lt;h2&gt;
  
  
  pandasのインストール
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pip3 &lt;span class="nb"&gt;install &lt;/span&gt;pandas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pythonスクリプト
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;host&lt;/code&gt;, &lt;code&gt;csvFilePath&lt;/code&gt;, &lt;code&gt;csvColumnName&lt;/code&gt; という変数を変更すれば、ご自身の環境に合わせることができると思います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;urllib.request&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;


&lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://shootacean.com"&lt;/span&gt;
&lt;span class="n"&gt;csvFilePath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"urls.csv"&lt;/span&gt;
&lt;span class="n"&gt;csvColumnName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"uri"&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;checkUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="s"&gt;"""指定したURLにGETリクエストした際のHTTPステータスをチェックする"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# GETリクエストをしてレスポンスを受け取る
&lt;/span&gt;        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;urlopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# HTTPステータスが正常だった場合
&lt;/span&gt;            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HTTPError&lt;/span&gt;  &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;urllib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;URLError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'reason'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="nb"&gt;hasattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'code'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# CSVファイルを読み込む
&lt;/span&gt;    &lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csvFilePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# CSVのレコード数分、チェックを繰り返す
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;csvColumnName&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;uri&lt;/span&gt;
        &lt;span class="c1"&gt;# チェックを行う
&lt;/span&gt;        &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;checkUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# チェックが成功した場合
&lt;/span&gt;            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# チェックが失敗場合
&lt;/span&gt;            &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  CSVレイアウト例
&lt;/h2&gt;

&lt;p&gt;使うのは１カラムだけなのでレイアウトは何でも大丈夫です。&lt;br&gt;
１レコード目はヘッダーとして利用します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;uri
/
/contact
/privacy-policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/ja/3/library/urllib.request.html#urllib.request.urlopen"&gt;urllib.request --- URL を開くための拡張可能なライブラリ — Python 3.9.4 ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/37779795/to-print-http-status-code-in-python-3-urllib"&gt;windows - To print http status code in Python 3 (urllib) - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/hoto17296/items/8fcf55cc6cd823a18217"&gt;Python の HTTP クライアントは urllib.request で十分 - Qiita&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.classmethod.jp/articles/python-requests-status-code/"&gt;PythonモジュールRequestsのHTTPステータスコードについて | DevelopersIO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://note.nkmk.me/python-pandas-dataframe-for-iteration/"&gt;pandas.DataFrameのforループ処理（イテレーション） | note.nkmk.me&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>japanese</category>
    </item>
    <item>
      <title>英文をブログURLに適した形式に変換するPythonスクリプト</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Tue, 25 May 2021 23:54:08 +0000</pubDate>
      <link>https://dev.to/shootacean/url-python-24md</link>
      <guid>https://dev.to/shootacean/url-python-24md</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xQo5TjTP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/6912ea21f2b09143a630cca6175a6e1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xQo5TjTP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.gyazo.com/6912ea21f2b09143a630cca6175a6e1c.png" alt="Image from Gyazo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Python script to convert English text to a format suitable for blog URLs&lt;/p&gt;

&lt;p&gt;こんにちは。shootaceanです。&lt;/p&gt;

&lt;p&gt;ブログ記事を書いた後にはURLを決める必要がありますが、&lt;br&gt;
その際に活用できるPythonスクリプトを紹介します。&lt;/p&gt;

&lt;p&gt;Pythonを実行する環境さえあればコピペだけで真似できるので、ぜひ試してみてください。&lt;/p&gt;

&lt;p&gt;以下のPythonコードを main.py というファイル名で保存します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="s"&gt;"""英文を記事URLの形式に変換する"""&lt;/span&gt;

    &lt;span class="n"&gt;newTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;newTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTitle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;newTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTitle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;newTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTitle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"'"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# 他に変換したい文字がある場合は、ここに追記していく
&lt;/span&gt;    &lt;span class="c1"&gt;# newTitle = newTitle.replace("変換前の文字", "変換後の文字", -1)
&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;newTitle&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"__main__"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="c1"&gt;# コマンドライン引数を受け取る ( sys.argv[0]はプログラム名なので使用しない )
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# 引数が1つの場合は、そのまま使用する
&lt;/span&gt;        &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# 引数が2つ以上の場合は、文字列として連結する
&lt;/span&gt;        &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:])&lt;/span&gt;

    &lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドで実行できます。&lt;br&gt;
実行すると変換後の文字が表示されるので、それを記事URLとして使います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python3 main.py &lt;span class="s2"&gt;"Your Blog's Title"&lt;/span&gt;
your-blogs-title

&lt;span class="nv"&gt;$ &lt;/span&gt;python3 main.py Your Blog&lt;span class="se"&gt;\'&lt;/span&gt;s Title
your-blogs-title
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以上これだけです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ブログ記事のURLを決める&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;という作業は今後頻繁に行っていく作業なため、早い段階で自動化した方が時間の節約になります。&lt;/p&gt;

&lt;p&gt;プログラムとしては単純なものなので、活用していただければ嬉しいです。&lt;/p&gt;

&lt;h2&gt;
  
  
  この記事で試してみた例
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;英文をブログURLに適した形式に変換するPythonスクリプト&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;というブログタイトルを翻訳ツールで翻訳すると、&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Python script to convert English text to a format suitable for blog URLs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;となりました。&lt;br&gt;
その英文をPythonスクリプトで変換してみると&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;python3 blog_title.py Python script to convert English text to a format suitable &lt;span class="k"&gt;for &lt;/span&gt;blog URLs
python-script-to-convert-english-text-to-a-format-suitable-for-blog-urls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;という感じで変換され、&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python-script-to-convert-english-text-to-a-format-suitable-for-blog-urls&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;という記事URLとして利用できる形式になります。&lt;/p&gt;

&lt;h2&gt;
  
  
  変換する文字を追加したい場合
&lt;/h2&gt;

&lt;p&gt;上記のPythonコード内の&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;他に変換したい文字がある場合は、ここに追記していく&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;と記載されている行へ以下のように追記していきます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 他に変換したい文字がある場合は、ここに追記していく
# newTitle = newTitle.replace("変換前の文字", "変換後の文字", -1)
# ダブルクォートを削除する
&lt;/span&gt;&lt;span class="n"&gt;newTitle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newTitle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.python.org/3/library/sys.html#sys.argv"&gt;sys — System-specific parameters and functions — Python 3.9.5 documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://note.nkmk.me/python-command-line-arguments/"&gt;Pythonでコマンドライン引数を扱う方法（sys.argv, argparse） | note.nkmk.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.pyq.jp/entry/Python_kaiketsu_180207"&gt;Pythonのif &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;" とは何ですか？への回答 - Python学習チャンネル by PyQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>japanese</category>
    </item>
    <item>
      <title>AWS CLI での EC2 起動時の UnauthorizedOperation エラー</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Mon, 02 Mar 2020 14:18:35 +0000</pubDate>
      <link>https://dev.to/shootacean/aws-cli-ec2-unauthorizedoperation-466d</link>
      <guid>https://dev.to/shootacean/aws-cli-ec2-unauthorizedoperation-466d</guid>
      <description>&lt;h2&gt;
  
  
  実行したコマンド
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 run-instances
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  エラー内容
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  エラーメッセージ全体
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: tpNG4Ag3__Co44EMHx-vIkiZHCEGsJXC5WKyizyBzLUqbeLeeTRqDOPoOKB7hkdIpQSxBf2TBSfDgWKLUB5Ra7XAlq1e5ctNRyxcLkvA7kDs4b1CxVah5Yo3IxafEU5KQAD2uN5sHeCwZe2sd4IJUZkOiSNv_w_dSUfOUihgQ80_CJtpb1_lB6vxKRbd7XWAmsLspeun1Q7L3rJJCS8Y0BTVKlKXPDMOIhpjc--cYLsB1MZ0ZCq178BNgFKzv747Ky4NgN4VRUywI1MYiLy9uWzeKc_wGgLM2mJ6JJB8hBvAHprbKQin_J1tuuINAnF85gvFkY6-ieBZ5slajmW69m6WbzqF3ylx50YF9bj_JMDHJtMBVFvT9jgXJz9UDJJVok_D_Lh1oH8A-dC123n9_dDAJrQmo7QZ4oTAQJmP8MBSFvjHRhAEu7Ed4GpKXZyFZPk-IFORkRACNB1a-Wdm3CaYr4-wA8Icu-0g4Vw4BTvnVPlK8Z3MXE4nuIXJivrUh6LvMgftJRqzYWAPaZnL9uM5oLmhlG4OxYQI6e01UYUqf9kanyDQtrVQipEXGnDZQA
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  原因
&lt;/h2&gt;

&lt;p&gt;起動する EC2 に インスタンスプロファイルを設定していたが、&lt;code&gt;iam:PassRole&lt;/code&gt; 権限が無かった。&lt;/p&gt;

&lt;h2&gt;
  
  
  解決方法
&lt;/h2&gt;

&lt;p&gt;AWS CLIを実行するIAMユーザーのポリシーに &lt;code&gt;iam:PassRole&lt;/code&gt; の権限を付与します。&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://aws.amazon.com/jp/blogs/security/granting-permission-to-launch-ec2-instances-with-iam-roles-passrole-permission/"&gt;https://aws.amazon.com/jp/blogs/security/granting-permission-to-launch-ec2-instances-with-iam-roles-passrole-permission/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  補足
&lt;/h2&gt;

&lt;p&gt;エラーメッセージの &lt;code&gt;Encoded authorization failure message:&lt;/code&gt; 以降に出力されている文字列はエンコードされているので、&lt;br&gt;
&lt;code&gt;aws sts decode-authorization-message&lt;/code&gt; コマンドでデコードする必要があります。&lt;/p&gt;

&lt;h3&gt;
  
  
  参考
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://dev.classmethod.jp/cloud/aws/sts-decode-authorization-message/"&gt;https://dev.classmethod.jp/cloud/aws/sts-decode-authorization-message/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>japanes</category>
    </item>
    <item>
      <title>GitHub Organizations で GitHub Actions を利用しようとした際の Permission Error</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Sun, 01 Mar 2020 15:39:48 +0000</pubDate>
      <link>https://dev.to/shootacean/github-organizations-github-actions-permission-error-3h2e</link>
      <guid>https://dev.to/shootacean/github-organizations-github-actions-permission-error-3h2e</guid>
      <description>&lt;h2&gt;
  
  
  エラー内容
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Only actions in "hoge-organization" are allowed for this repository&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  原因
&lt;/h2&gt;

&lt;p&gt;GitHubの該当リポジトリのページ &amp;gt; Settings &amp;gt; Actions &amp;gt; Actions Permissions を確認してください。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Enable local Actions only for this repository&lt;/code&gt; が選択されている場合、&lt;br&gt;
3rd PartyのGitHub Actions は利用できません。&lt;/p&gt;

&lt;h2&gt;
  
  
  対応
&lt;/h2&gt;

&lt;p&gt;以下のどちらかで対応可能です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions 内の 3rd Party の Action定義を削除する

&lt;ul&gt;
&lt;li&gt;GitHub Actions 初期テンプレートなら &lt;code&gt;actions/checkout@v2&lt;/code&gt; の部分&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Actions Permissions を &lt;code&gt;Enable local and third party Actions for this repository&lt;/code&gt; に変更する&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>github</category>
      <category>japanese</category>
    </item>
    <item>
      <title>PHPの include と require の違いについて</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Sun, 01 Mar 2020 15:33:11 +0000</pubDate>
      <link>https://dev.to/shootacean/php-include-require-5a7h</link>
      <guid>https://dev.to/shootacean/php-include-require-5a7h</guid>
      <description>&lt;p&gt;PHPで外部モジュールを読み込む際に利用する &lt;code&gt;include&lt;/code&gt;, &lt;code&gt;require&lt;/code&gt; の違いです。&lt;/p&gt;

&lt;h2&gt;
  
  
  include と require の使い分けまとめ
&lt;/h2&gt;

&lt;p&gt;指定したモジュールが存在しない場合の挙動が異なります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;include&lt;/code&gt; の場合、Warning になりスルーされる。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;require&lt;/code&gt; の場合、Fatal error となり処理が終了する。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;外部モジュールを読み込んだ後の処理が、外部モジュールに依存しているかどうかによって使い分けましょう。&lt;/p&gt;

&lt;p&gt;依存していない場合は &lt;code&gt;include&lt;/code&gt;、依存している場合は &lt;code&gt;require&lt;/code&gt; です。&lt;br&gt;
基本的には&lt;code&gt;require&lt;/code&gt;でいいかと思います。&lt;/p&gt;
&lt;h2&gt;
  
  
  include と require の実際の挙動を検証してみる
&lt;/h2&gt;

&lt;p&gt;以下のコードを実行して、実際の挙動を確認してみます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="k"&gt;include&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foo'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'Hello'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;php index.php
Warning: include&lt;span class="o"&gt;(&lt;/span&gt;foo&lt;span class="o"&gt;)&lt;/span&gt;: failed to open stream: No such file or directory &lt;span class="k"&gt;in&lt;/span&gt; /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 3

Warning: include&lt;span class="o"&gt;()&lt;/span&gt;: Failed opening &lt;span class="s1"&gt;'foo'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;inclusion &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;include_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'.:'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 3

Warning: require&lt;span class="o"&gt;(&lt;/span&gt;bar&lt;span class="o"&gt;)&lt;/span&gt;: failed to open stream: No such file or directory &lt;span class="k"&gt;in&lt;/span&gt; /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 5

Fatal error: require&lt;span class="o"&gt;()&lt;/span&gt;: Failed opening required &lt;span class="s1"&gt;'bar'&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;include_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'.:'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; /Users/shootacean/github.com/shootacean/sandbox/php/include-require/index.php on line 5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;include&lt;/code&gt;では、Warning となりますが、次の処理へ進むので&lt;code&gt;require&lt;/code&gt;が実行されます。&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;require&lt;/code&gt;では、Fatal error となり処理が終了するので、&lt;code&gt;echo 'Hello';&lt;/code&gt;は実行されません。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ビジネスロジックのコアな部分の外部モジュールを利用する際などには、&lt;br&gt;&lt;br&gt;
&lt;code&gt;require&lt;/code&gt;を利用することでモジュール読み込み時点で致命的なエラーに気づくことができます。&lt;/p&gt;

&lt;p&gt;ビュー層などの致命的な問題にならない箇所では &lt;code&gt;include&lt;/code&gt; でいいかと思います。&lt;/p&gt;

&lt;p&gt;以上、PHPの &lt;code&gt;include&lt;/code&gt; と &lt;code&gt;require&lt;/code&gt; の挙動の違いについてでした。&lt;/p&gt;

</description>
      <category>php</category>
      <category>japanese</category>
    </item>
    <item>
      <title>p5.jsの開発環境を構築する</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate>
      <link>https://dev.to/shootacean/p5-js-3d82</link>
      <guid>https://dev.to/shootacean/p5-js-3d82</guid>
      <description>&lt;h2&gt;
  
  
  この記事のゴール
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;p5.js&lt;/code&gt;を利用したクリエイティブ・コーディングを行える開発環境を構築する。&lt;/p&gt;

&lt;h2&gt;
  
  
  前提環境
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mac&lt;/li&gt;
&lt;li&gt;Visual Studio Code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  構築する手順
&lt;/h2&gt;

&lt;p&gt;p5.js用のプロジェクトディレクトリを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;p5js 
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;p5js
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;index.html
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;sketch.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;下記のダウンロードページの下部にある &lt;code&gt;p5.min.js&lt;/code&gt; をクリックしてダウンロードします。&lt;br&gt;
&lt;a href="https://p5js.org/download/"&gt;https://p5js.org/download/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R-XiXKTv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/67b6pdzp0i24ay6pbdse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R-XiXKTv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/67b6pdzp0i24ay6pbdse.png" alt="p5js download link"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ダウンロードした &lt;code&gt;p5.min.js&lt;/code&gt; をプロジェクトディレクトリに配置します。&lt;/p&gt;

&lt;p&gt;この時点でのプロジェクトディレクトリ内はこうなっています。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;tree
&lt;span class="nb"&gt;.&lt;/span&gt;
├── index.html
├── p5.min.js
└── sketch.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;これで &lt;code&gt;p5.js&lt;/code&gt; を利用できるようになったので、HTMLとJavaScriptを書いていきます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"p5.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"sketch.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// sketch.js&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;createCanvas&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;640&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;ellipse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;triangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;この状態で、&lt;code&gt;Visual Studio Code&lt;/code&gt;の Live Server 機能を使っていきます。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Visual Studio Code&lt;/code&gt; の右下に表示されている &lt;code&gt;Go Live&lt;/code&gt; をクリックします。&lt;br&gt;&lt;br&gt;
すると、&lt;code&gt;127.0.0.1:5500&lt;/code&gt;で &lt;code&gt;index.html&lt;/code&gt;にアクセスできるようになります。&lt;/p&gt;

&lt;p&gt;ブラウザで&lt;code&gt;127.0.0.1:5500&lt;/code&gt;にアクセスし、&lt;br&gt;&lt;br&gt;
以下のようにページが表示されれば &lt;code&gt;p5.js&lt;/code&gt;の開発環境は構築完了です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fHlDCvzO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k2bnl10a7z6gpq1zqbqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fHlDCvzO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/k2bnl10a7z6gpq1zqbqv.png" alt="p5js"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>japanese</category>
      <category>p5js</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>PHP標準機能でディレクトリ毎にPHPの設定変更を行う方法</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Sat, 28 Sep 2019 14:27:42 +0000</pubDate>
      <link>https://dev.to/shootacean/php-php-4kgk</link>
      <guid>https://dev.to/shootacean/php-php-4kgk</guid>
      <description>&lt;p&gt;PHP標準機能 &lt;code&gt;.user.ini&lt;/code&gt;を利用して、ディレクトリ毎にPHP設定を変更する方法をご紹介します。  &lt;/p&gt;

&lt;p&gt;WebサーバーにApacheを利用している場合は .htaccessファイル でディレクトリ毎にPHP設定を変更することができますが、&lt;br&gt;
Nginx + php-fpm を利用している場合 .htaccessファイル は使用できません。&lt;br&gt;&lt;br&gt;
なので&lt;code&gt;.user.ini&lt;/code&gt;を利用します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.php.net/manual/ja/configuration.file.per-user.php"&gt;PHP公式ドキュメント .user.ini ファイル&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;検証用のNginx + php-fpm 環境をDockerで構築しています。&lt;br&gt;&lt;br&gt;
※ファイル内容は最後にまとめて記載していますので、ご活用してください。&lt;/p&gt;

&lt;p&gt;例として、使用メモリ最大値&lt;code&gt;memory_limit&lt;/code&gt;を変更してみます。&lt;/p&gt;
&lt;h2&gt;
  
  
  デフォルトのPHP設定を確認する
&lt;/h2&gt;

&lt;p&gt;デフォルトでは、&lt;code&gt;.user.ini&lt;/code&gt;というファイルを探すようになっていますが、変更することもできます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rGqhJpeI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7u7zffx9x3dm3vzey80w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rGqhJpeI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7u7zffx9x3dm3vzey80w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.user.ini&lt;/code&gt;を使用していない状態の設定を確認しておきます。&lt;br&gt;
左側の数値がディレクトリ毎の設定、右側の数値がphp.iniで設定している値です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z_jPiRmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hhnuu8p1wlu6axfn80ja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z_jPiRmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/hhnuu8p1wlu6axfn80ja.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qf7QqWym--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ab13bvqgnhds7srsx3nc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qf7QqWym--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/ab13bvqgnhds7srsx3nc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  .user.iniで設定を変更する
&lt;/h2&gt;

&lt;p&gt;PHP設定を変更したいディレクトリ直下に&lt;code&gt;.user.ini&lt;/code&gt;ファイルを作成します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;; .user.ini
&lt;/span&gt;&lt;span class="py"&gt;memory_limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;256M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;再度、phpinfoを確認してみると&lt;code&gt;256M&lt;/code&gt;に変更されていることがわかります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_moHdF0d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rd4j8yjnl6youpjg9ymt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_moHdF0d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rd4j8yjnl6youpjg9ymt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;上記のように&lt;code&gt;.user.ini&lt;/code&gt;を利用することで、Nginx + php-fpm環境でもディレクトリ毎にPHP設定を変更することができます。&lt;/p&gt;

&lt;p&gt;私が実際に行った例としては、&lt;br&gt;&lt;br&gt;
AWS上に構築した EC2 AutoScalingGroup + CodeDeploy(Blue/Green) という環境に対してCakePHPプロジェクトをデプロイする必要があり、&lt;br&gt;
デプロイソースに&lt;code&gt;.user.ini&lt;/code&gt;を含めることで、ディレクトリ毎のPHP設定変更を実現しました。&lt;/p&gt;

&lt;p&gt;PHPファイル内で&lt;code&gt;ini_set()&lt;/code&gt;を行うよりも&lt;code&gt;.user.ini&lt;/code&gt;を使うほうが設定の見通しがよくなるので、&lt;code&gt;.user.ini&lt;/code&gt;を積極的に使うべきだと思います。&lt;/p&gt;




&lt;h2&gt;
  
  
  検証で利用したDocker構成
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ディレクトリ構成
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;tree &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;
├── code
│   ├── .user.ini
│   └── index.php
├── docker-compose.yml
└── nginx.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ファイル内容
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ./code/.user.ini
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;memory_limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;256M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ./code/index.php
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nb"&gt;phpinfo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ./docker-compose.yml
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;web&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:alpine&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8080:80"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./nginx.conf:/etc/nginx/conf.d/default.conf"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./code:/code&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php&lt;/span&gt;
    &lt;span class="na"&gt;links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;php&lt;/span&gt;
  &lt;span class="na"&gt;php&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;php:7-fpm-alpine&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./code:/code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ./nginx.conf
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;server&lt;/span&gt; {
    &lt;span class="n"&gt;listen&lt;/span&gt;       &lt;span class="m"&gt;80&lt;/span&gt;;
    &lt;span class="n"&gt;root&lt;/span&gt;         /&lt;span class="n"&gt;code&lt;/span&gt;;
    &lt;span class="n"&gt;index&lt;/span&gt;  &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;htm&lt;/span&gt;;

    &lt;span class="n"&gt;location&lt;/span&gt; ~ \.&lt;span class="n"&gt;php&lt;/span&gt;$ {
       &lt;span class="n"&gt;fastcgi_pass&lt;/span&gt;   &lt;span class="n"&gt;php&lt;/span&gt;:&lt;span class="m"&gt;9000&lt;/span&gt;;
       &lt;span class="n"&gt;fastcgi_index&lt;/span&gt;  &lt;span class="n"&gt;index&lt;/span&gt;.&lt;span class="n"&gt;php&lt;/span&gt;;
       &lt;span class="n"&gt;include&lt;/span&gt;        &lt;span class="n"&gt;fastcgi_params&lt;/span&gt;;
       &lt;span class="n"&gt;fastcgi_param&lt;/span&gt;  &lt;span class="n"&gt;SCRIPT_FILENAME&lt;/span&gt;  $&lt;span class="n"&gt;document_root&lt;/span&gt;/$&lt;span class="n"&gt;fastcgi_script_name&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Docker起動方法
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;docker-compose up
&lt;span class="c"&gt;# localhsot:8080でアクセスできます。&lt;/span&gt;
&lt;span class="c"&gt;# ctrl + C で終了できます。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>php</category>
      <category>japanese</category>
    </item>
    <item>
      <title>Goの標準ライブラリでWebサーバーを立ててHello, Worldする</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Mon, 23 Sep 2019 06:26:41 +0000</pubDate>
      <link>https://dev.to/shootacean/go-web-hello-world-1ogb</link>
      <guid>https://dev.to/shootacean/go-web-hello-world-1ogb</guid>
      <description>&lt;p&gt;Goの標準ライブラリ &lt;code&gt;net/http&lt;/code&gt; を利用すれば、簡単にWebサーバーを実装することができます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# goファイルを作成する&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のような、コードを書くことでWebサーバーを実装できます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// ルーティングを設定する&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello, World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="c"&gt;// ポート8080番でサーバーを起動する&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以下のコマンドを実行後、ブラウザなどで&lt;br&gt;&lt;br&gt;
&lt;a href="http://localhost:8080"&gt;http://localhost:8080&lt;/a&gt;&lt;br&gt;&lt;br&gt;
にアクセスすると、Hello, Worldが出力されます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go run server.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上記コマンドを実行した際とは別のターミナルセッションで、curlコマンドでアクセスしてみます&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl localhost:8080
Hello, World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;以上、Goの標準ライブラリ &lt;code&gt;net/http&lt;/code&gt;でWebサーバーを建てて、Hello, Worldする手順でした。&lt;/p&gt;

</description>
      <category>go</category>
      <category>japanese</category>
    </item>
    <item>
      <title>GoでのHello, World</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Mon, 23 Sep 2019 06:20:41 +0000</pubDate>
      <link>https://dev.to/shootacean/go-hello-world-2645</link>
      <guid>https://dev.to/shootacean/go-hello-world-2645</guid>
      <description>&lt;p&gt;GoのインストールからHello, Worldを出力するまでの手順です。&lt;/p&gt;

&lt;h2&gt;
  
  
  MacにGoをインストールする
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;go
&lt;span class="nv"&gt;$ &lt;/span&gt;go version
go version go1.12.7 darwin/amd64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hello，Worldの実装
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;hello.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Hello, Worldプログラムの実行
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;go run hello.go
Hello, World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>go</category>
    </item>
    <item>
      <title>CloudFormationで作成したEC2 Auto Scaling Groupスタックが削除されない？</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Mon, 23 Sep 2019 05:17:08 +0000</pubDate>
      <link>https://dev.to/shootacean/cloudformation-ec2-auto-scaling-group-18cp</link>
      <guid>https://dev.to/shootacean/cloudformation-ec2-auto-scaling-group-18cp</guid>
      <description>&lt;p&gt;CloudFormationスタックとして作成したEC2 Auto Scaling Groupが削除されなかった際に調べたことを記載します。&lt;/p&gt;

&lt;p&gt;CFn(CloudFormation)でEC2 Auto Scaling Groupのスタックを作成して、スケーリングの検証を行った後、&lt;br&gt;&lt;br&gt;
作成したスタックを削除してもEC2 Auto Scaling GroupとEC2インスタンスの削除がされなかったことがありました。&lt;/p&gt;

&lt;h2&gt;
  
  
  結論
&lt;/h2&gt;

&lt;p&gt;何もしなくても10分程度待てば削除されました。&lt;/p&gt;

&lt;h2&gt;
  
  
  確認したこと
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;スタック削除の操作後、マネジメントコンソールでEC2 Auto Scaling Groupを確認しても&lt;code&gt;削除中&lt;/code&gt;の表示はない&lt;/li&gt;
&lt;li&gt;維持インスタンス数、最小インスタンス数、最大インスタンス数が &lt;code&gt;0&lt;/code&gt; になっていた。&lt;/li&gt;
&lt;li&gt;EC2 Auto Scaling Groupに紐付いているEC2インスタンスの起動ステータスは&lt;code&gt;動作中&lt;/code&gt;のまま&lt;/li&gt;
&lt;li&gt;手動でEC2 Auto Scaling GroupとEC2インスタンスを削除すると、スタックも削除される&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  調査したこと
&lt;/h2&gt;

&lt;p&gt;公式ドキュメントの『&lt;a href="https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-auto-scaling-group.html"&gt;自動スケーリンググループの削除&lt;/a&gt;』では下記のように記載されていました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Auto Scalingグループを削除する前にすべてのインスタンスを終了するには、UpdateAutoScalingGroupを呼び出して、Auto Scalingグループの最小サイズと必要な容量をゼロに設定します。&lt;br&gt;
To terminate all instances before deleting the Auto Scaling group, call UpdateAutoScalingGroup and set the minimum size and desired capacity of the Auto Scaling group to zero.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;今回のCFnスタック削除でのAutoScalingGroup削除では、上記の方法が取られているようです。&lt;/p&gt;

&lt;p&gt;CFnで構成管理するまでは、&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;マネジメントコンソールからAuto Scaling Groupを作成する&lt;/li&gt;
&lt;li&gt;検証&lt;/li&gt;
&lt;li&gt;マネジメントコンソールからAutoScalingGroupを削除する&lt;/li&gt;
&lt;li&gt;紐付いているEC2インスタンスが削除されることを確認&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;という手順を行っており、AutoScalingGroup削除操作の数秒後にはEC2インスタンスの削除が始まっていたので、&lt;br&gt;&lt;br&gt;
AutoScalingGroupを削除するとほぼ同時にEC2インスタンスも削除されるものだと思っていました。&lt;/p&gt;

&lt;h2&gt;
  
  
  課題や知らなかったこと
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;利用するサービスのドキュメントは大雑把でもいいので一通りは読んでおくべき。&lt;/li&gt;
&lt;li&gt;設定次第で挙動は異なるし、使用するサービス毎にデフォルトの挙動が異なるのを念頭においておく必要がある。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/reference/autoscaling/delete-auto-scaling-group.html"&gt;自動スケーリンググループの削除&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/ryo0301/items/f0c2d155874b14427dc6"&gt;CloudFormationでのAutoScalingGroup配下のインスタンス入れ替え方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ted027.com/post/aws-autoscalling-suspend/"&gt;AWS AutoScallingGroupの削除に失敗する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.classmethod.jp/cloud/two-ways-replacing-update-on-cloudformation/"&gt;AWS CloudFormation構成のAutoScalingインスタンスを式年遷宮みたいに入れ替える方法2つ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>japanese</category>
    </item>
    <item>
      <title>CodeDeployでAutoScalingGroupに対してデプロイした際のロールエラー</title>
      <dc:creator>Shootacean</dc:creator>
      <pubDate>Mon, 23 Sep 2019 03:34:53 +0000</pubDate>
      <link>https://dev.to/shootacean/codedeploy-autoscalinggroup-195d</link>
      <guid>https://dev.to/shootacean/codedeploy-autoscalinggroup-195d</guid>
      <description>&lt;h2&gt;
  
  
  エラー内容
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;The IAM role arn:~~~ does not give you permission to perform operations in the following AWS service: AmazonAutoScaling.&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  解決方法
&lt;/h2&gt;

&lt;p&gt;現在 CodeDeployに割り当てている IAMロールのポリシーに、以下のポリシーを追加するだけです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VisualEditor0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"iam:PassRole"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ec2:CreateTags"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ec2:RunInstances"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/53731017/simple-iam-issue-with-codedeploy"&gt;StackOverflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://h2ik.co/2019/02/28/aws-codedeploy-blue-green/"&gt;https://h2ik.co/2019/02/28/aws-codedeploy-blue-green/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>japanese</category>
    </item>
  </channel>
</rss>
