tag:blogger.com,1999:blog-20422289132515791592024-03-17T03:53:14.424+09:00AIMEK's blog神戸のシステム開発会社、株式会社アイメックのブログです。株式会社アイメックhttp://www.blogger.com/profile/14880235584487404046noreply@blogger.comBlogger345125tag:blogger.com,1999:blog-2042228913251579159.post-40638457072873757142023-10-01T19:00:00.074+09:002024-02-28T22:44:43.130+09:00Dynalistでメモの達人になれるか!<p><br /></p><p>こんにちは、せんです。</p><p>私の苦手なことのひとつは片付けです。</p><p>もともと収集癖もありますし、何にでもはまりやすい質で、書籍や雑貨を中心にすぐにものが場所を占めてしまいます。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDD4VuSJxq-97njP8jbxOBm6PBI3Yw5T6zD89jy0XXaaZt2iyZcgMfRgQb952ecH-yWAH-p8diUYVh1T0GXBLuK1-QyS38RpDaDruzDDeewpDV89tbdpadgTa8Q_lREIdeMiW545Pj8vaXJgZD2zMq2q-nCeg9rZX11EirOFenbhJ7UM1N3jkv4Loly5BF/s1003/super_business_woman_bannou.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1003" data-original-width="1003" height="434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDD4VuSJxq-97njP8jbxOBm6PBI3Yw5T6zD89jy0XXaaZt2iyZcgMfRgQb952ecH-yWAH-p8diUYVh1T0GXBLuK1-QyS38RpDaDruzDDeewpDV89tbdpadgTa8Q_lREIdeMiW545Pj8vaXJgZD2zMq2q-nCeg9rZX11EirOFenbhJ7UM1N3jkv4Loly5BF/w434-h434/super_business_woman_bannou.png" width="434" /></a></div><br /><p><br /></p><p><br /></p><p>そんな私、携帯やパソコンの中身を片付けるのもまあまあ苦手です。</p><p>メモを取ることはできても、そのメモを整理整頓していくのはめんどくさい。</p><p>パソコンを開いたら携帯のメモを新たに開くのがめんどくさい。</p><p>以前「メモを取るというのは、定期的に見直すところまでできてこそ意味がある」というような格言を聞きましたが、</p><p>「直さないとなあ」と思ってもすぐにできるようになっちゃうほど出来た人間ではないと自分でもよくわかっています。</p><p><br /></p><p>そんなわけで、最近探していたのが「最初から整理できるメモ、が作れるツール」でした。</p><p>要は、最初からある程度整理した状態で保存する、という、できる人っぽい手法をとりたいのです。</p><p>無料で使えて、</p><p>携帯でもパソコンでも内容が同期できて、</p><p>ルーズリーフみたいに内容を抜き差しできて、</p><p>検索とかできちゃったりして、</p><p>欲を言えば、見た目がいい。</p><p>そんなのあるのかしらと思いつつ、探してみた結果、</p><p><br /></p><p>「Dynalist」というツールを見つけました。</p><p>アウトライナーと呼ばれるツールです。</p><p>有料版もあるそうですが、今回は無料版の機能だけ見てみます。</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">さっそく登録!!</span></h4><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;">公式サイト(</span><a href="https://dynalist.io/">https://dynalist.io/</a>)にアクセスしてみましょう。</div><p>トップページからわかるように、まだ日本語化はされていません。</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCcT1WW2GfwYpVhTX4Wmc-M8CIHWzonxFkZGHcvZV5kxOk2bblKoDhLyx05kvOFiW4u5YO5KZJLkCzl4OjQnz4z6gI50O5nNGcBtmt3-CIHwlUts1Jz3XjciK2MQAqWeACe4T_HBjOeHBecI6XY2qld5j4L7UYNT-qEJW8Ffa7RwGd6lfpRfvau5n4duZM/s1296/toppage.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="994" data-original-width="1296" height="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCcT1WW2GfwYpVhTX4Wmc-M8CIHWzonxFkZGHcvZV5kxOk2bblKoDhLyx05kvOFiW4u5YO5KZJLkCzl4OjQnz4z6gI50O5nNGcBtmt3-CIHwlUts1Jz3XjciK2MQAqWeACe4T_HBjOeHBecI6XY2qld5j4L7UYNT-qEJW8Ffa7RwGd6lfpRfvau5n4duZM/w559-h428/toppage.png" width="559" /></a></p><p><br /></p><p>Googleのアカウントで登録ができるので、さっそく使ってみました。</p><p>参考サイト:<a href="https://www.sungrove.co.jp/dynalist/">https://www.sungrove.co.jp/dynalist/</a></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCJ3CLNAwsmYEPfHkdVdDx5MC19-MMNw4I0oCEuEfAeRDuCQRt2ZV6HR94rhQsuNtJZGr0q8I2bbsxsO7J5WmZ7F0FdssES-yjdj2h3Hrps6FqBZ39pKwasyQOh6gTrIxWCacutxkynSuqKF6YVpj3E9xiC4FFVBAWVoM48s0CP1_hEfOozR6_-1d66uZK/s1294/signup.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="994" data-original-width="1294" height="437" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCJ3CLNAwsmYEPfHkdVdDx5MC19-MMNw4I0oCEuEfAeRDuCQRt2ZV6HR94rhQsuNtJZGr0q8I2bbsxsO7J5WmZ7F0FdssES-yjdj2h3Hrps6FqBZ39pKwasyQOh6gTrIxWCacutxkynSuqKF6YVpj3E9xiC4FFVBAWVoM48s0CP1_hEfOozR6_-1d66uZK/w568-h437/signup.png" width="568" /></a></p><p><br /></p><p>登録が終わると、スタートページとしてメモの見本が表示されます。</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTQpE_DzR1oXLk7nKufhROwvybmVRn5UuFauEeEQPIaNcTi131BVq1kc_Od6YWjlyPhZNVQcGhv65-EFE4h3A0fuqd3NrbQHx1OuwES-UXJDm4VPihyOYNDMnsjwVaCGHtHN9tnCQBtiOMTWCb5iI_50Cowr4SwLDq1R-030iz9lAEbt9CAVNu3DJcvJRg/s1920/getstart.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1029" data-original-width="1920" height="317" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTQpE_DzR1oXLk7nKufhROwvybmVRn5UuFauEeEQPIaNcTi131BVq1kc_Od6YWjlyPhZNVQcGhv65-EFE4h3A0fuqd3NrbQHx1OuwES-UXJDm4VPihyOYNDMnsjwVaCGHtHN9tnCQBtiOMTWCb5iI_50Cowr4SwLDq1R-030iz9lAEbt9CAVNu3DJcvJRg/w590-h317/getstart.png" width="590" /></a></p><p><br /></p><p><br /></p><p>左上側の「+」アイコンをクリックすると、新しいフォルダとドキュメントを作成できます。</p><p><br /></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheWqtNWxoRTuJFrbQD2C9ngKmGnYyDIrmm7tgcCTsiCbAUn6NXAjLy_D_ZPmjt7WsbUsgV2zPgd4sXZS4zHAenCntaa-EGXoiVmTrvSITG_9KQx2xLtVpsTdZp8rK8x8oMW3FWixS6nTCholpqG4VWrozatd3wEmtQ3tA5TpyIh9Jmn21Ujpev5llZLa8d/s1295/createnewfolder.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="997" data-original-width="1295" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheWqtNWxoRTuJFrbQD2C9ngKmGnYyDIrmm7tgcCTsiCbAUn6NXAjLy_D_ZPmjt7WsbUsgV2zPgd4sXZS4zHAenCntaa-EGXoiVmTrvSITG_9KQx2xLtVpsTdZp8rK8x8oMW3FWixS6nTCholpqG4VWrozatd3wEmtQ3tA5TpyIh9Jmn21Ujpev5llZLa8d/w588-h452/createnewfolder.png" width="588" /></a></p><p><br /></p><p>試しにstudyフォルダの下にVB.NETというファイルを作ってみました。</p><p>調べ物をしたことをここに書き溜めていくようにします。</p><p><br /></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGZrCPuLtDW9QZ_2zZsjw3oZ_6EfXOuHdMW4z5axPAgSWA9RmZZxbOsxm-aR6RtrWbEy286hRIbZI57BOUgVfSmYZRFyh1jLJ9lyFeIhezeAdmt1Yx5MDP7I-9geyojeN0PWnSrKgjGsqXWm7lLKsvAYLnTyHiJFWiQaGdgeEs3sO6fWjoLmYYiQP0Csyd/s1293/creatednewdoc.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="995" data-original-width="1293" height="447" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGZrCPuLtDW9QZ_2zZsjw3oZ_6EfXOuHdMW4z5axPAgSWA9RmZZxbOsxm-aR6RtrWbEy286hRIbZI57BOUgVfSmYZRFyh1jLJ9lyFeIhezeAdmt1Yx5MDP7I-9geyojeN0PWnSrKgjGsqXWm7lLKsvAYLnTyHiJFWiQaGdgeEs3sO6fWjoLmYYiQP0Csyd/w581-h447/creatednewdoc.png" width="581" /></a></p><p><br /></p><p>アウトライナーツールというだけあって、中身はリスト形式になっていきます。</p><p>タブキーを使って階層化することができます。</p><p><br /></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-BcNtBP9xxo-0dJuI8_yqURuht3W44PtNG_BW5lvAJtzQV3XccjMLyZL-rFuRwoMUaYNxjURKB31251Z4pqISClGlKkrFX8XW-7zxT58IDVo0tmkLf9pFz8FlC44eHpGb42dtM28moYzBsxd_A07E7oBuOSEfcQ-xh2vNN1ESNR50YXUfYhD36mat6NEE/s1299/vb.net.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="993" data-original-width="1299" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-BcNtBP9xxo-0dJuI8_yqURuht3W44PtNG_BW5lvAJtzQV3XccjMLyZL-rFuRwoMUaYNxjURKB31251Z4pqISClGlKkrFX8XW-7zxT58IDVo0tmkLf9pFz8FlC44eHpGb42dtM28moYzBsxd_A07E7oBuOSEfcQ-xh2vNN1ESNR50YXUfYhD36mat6NEE/w590-h452/vb.net.png" width="590" /></a></p><div><br /></div>便利なところその①<div>子を持つ階層に対して「+」「-」アイコンを使うことで、以下の階層を非表示にできます。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCi5FZgxvFFByMeqeHzWdpqi9fRy6JkezyOwcVl1hgzDjD3Co7p25c3tam0uUg5bdZ2pY8iNT5boLiT0hEIlo9U3Rfv6IDXruXHkQJvD8iDVZZp4AJ8Rb4KoXxcl9CZ5kr4B_LQMN3lDPREj6O_w5x_edDbMh_K5EVtF9HqovqWlOt4kbSpzooED0je-mh/s1295/displaynotdisplay.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="992" data-original-width="1295" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCi5FZgxvFFByMeqeHzWdpqi9fRy6JkezyOwcVl1hgzDjD3Co7p25c3tam0uUg5bdZ2pY8iNT5boLiT0hEIlo9U3Rfv6IDXruXHkQJvD8iDVZZp4AJ8Rb4KoXxcl9CZ5kr4B_LQMN3lDPREj6O_w5x_edDbMh_K5EVtF9HqovqWlOt4kbSpzooED0je-mh/w556-h426/displaynotdisplay.png" width="556" /></a></div><div><br /></div><div><br /></div><div>便利なところその➁</div><div>項目をコンパクトにまとめることができるので、項目の入れ替えもしやすいです。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOWCW6mQSHTDTI2uohsR92eVmpoIKhdiLUXInBsZySG_r7OeOfT1jJGEbi5AQPiuoNHcXkLmHhZu8jVLrXS6hOw6UZy_Lfqb4YlIPG8AoesKJagfEJbKe4d1fTQdAjus2yGMXeEnJRZLNtxZT68mB8zLlx_wWhsD7qFLeRTZW6rDOh4SH7s1RHJD04qmWP/s1295/moveitem.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="993" data-original-width="1295" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOWCW6mQSHTDTI2uohsR92eVmpoIKhdiLUXInBsZySG_r7OeOfT1jJGEbi5AQPiuoNHcXkLmHhZu8jVLrXS6hOw6UZy_Lfqb4YlIPG8AoesKJagfEJbKe4d1fTQdAjus2yGMXeEnJRZLNtxZT68mB8zLlx_wWhsD7qFLeRTZW6rDOh4SH7s1RHJD04qmWP/w551-h422/moveitem.png" width="551" /></a></div><div><br /></div><div>項目を選択した状態でエクスプローラーにドロップすると、独立したファイルになります。</div><div>(これ元に戻すにはどうしたらいいんだ???)<br /><br /></div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFr-Q42xa7_HtbSSYTn7mKtA9NODtoIOGf0dgz5LpnuSk166PaN2b9mQcSvjWWPy9QPc1uv6xs_Ua2WlcsV7S4xAYPOszNDngnsULRQcnd2CSH-_SgXdRA8Sg8PUVxIW2eHNOYlgjrkthsq6NgUCxx55aTKJ_dQO-qJGiqI1NIv1Igc_oUF0hPYlJCMLp3/s1294/moveitem2.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="993" data-original-width="1294" height="455" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFr-Q42xa7_HtbSSYTn7mKtA9NODtoIOGf0dgz5LpnuSk166PaN2b9mQcSvjWWPy9QPc1uv6xs_Ua2WlcsV7S4xAYPOszNDngnsULRQcnd2CSH-_SgXdRA8Sg8PUVxIW2eHNOYlgjrkthsq6NgUCxx55aTKJ_dQO-qJGiqI1NIv1Igc_oUF0hPYlJCMLp3/w592-h455/moveitem2.png" width="592" /></a></div><div><br /><p><br />
</p><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">こんな使い方もできる!!</span></h4><div><span style="font-weight: 400;"><br /></span></div><div>①チェックボックス</div><div> 各項目の先頭に表示されるハンバーガーをクリックすると、下のようにメニューが表示されます。</div><div> メニューからAdd Checkboxを選ぶと、黒点のあとにチェックボックスが表示されます。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyZSJTC8V_Wyub_ViOEsEKRLa2acyyHkPA492pQq4gCTzI89zDj9c_onIMNcnbvC9xXjSxgjK88gIjkDW7zaCpP_VMiKAdWdZnCXip2nfaCmUNdOd5VUuBXscQZilb2XeRosysOHrD2WnblUcoyEvISI2pLJ2WWjTHtFi8iFGNrEjsw9sMpJ8YqjV5MPwj/s1292/kaimonolist.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="995" data-original-width="1292" height="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyZSJTC8V_Wyub_ViOEsEKRLa2acyyHkPA492pQq4gCTzI89zDj9c_onIMNcnbvC9xXjSxgjK88gIjkDW7zaCpP_VMiKAdWdZnCXip2nfaCmUNdOd5VUuBXscQZilb2XeRosysOHrD2WnblUcoyEvISI2pLJ2WWjTHtFi8iFGNrEjsw9sMpJ8YqjV5MPwj/w596-h458/kaimonolist.png" width="596" /></a></div><div><br /></div><div>②番号付け</div><div> 同じくハンバーガーメニューから「Numbering Children」を選択すると、</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAD79BMgEf3CGfl9fHyps-IcBTq-vHK2seDvfKl_pLLk5NXrA6sgGgykXOBvxHsgJcVQzQsJC281YU99hdnUq2TpBVzNtoCfpf-x9DHYnma2stb2pQ_Ul2n1P3Bn8IRAQkPkT6EtV1QAFaIvpx7r7ipJJ2XsMUjh2kOJ6UcW3lpxWqinudt70JtR1obbmP/s1292/booklist1.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="993" data-original-width="1292" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAD79BMgEf3CGfl9fHyps-IcBTq-vHK2seDvfKl_pLLk5NXrA6sgGgykXOBvxHsgJcVQzQsJC281YU99hdnUq2TpBVzNtoCfpf-x9DHYnma2stb2pQ_Ul2n1P3Bn8IRAQkPkT6EtV1QAFaIvpx7r7ipJJ2XsMUjh2kOJ6UcW3lpxWqinudt70JtR1obbmP/w575-h442/booklist1.png" width="575" /></a></div><div><br /></div><div><br /></div><div>子階層に番号付きのリストになります。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj9MaS9DXJh6CCOQEU05WNrUFGMtEWcUIGiAIp_G9QPj2s_SYBhnhCntiZpFpm8j8qtKwtWkAweykADF3t05Lqtc-SLT6jzE_AqmUHN9FQIqaxNnbuwUQqhY15e9fDUGSMNPyPW8oK1eI_YhfgwW1F2JnmkmIVloEBIt1gJ3FaYSUgVz3d0zhP7E6nN_EB/s1295/booklist2.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="993" data-original-width="1295" height="469" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj9MaS9DXJh6CCOQEU05WNrUFGMtEWcUIGiAIp_G9QPj2s_SYBhnhCntiZpFpm8j8qtKwtWkAweykADF3t05Lqtc-SLT6jzE_AqmUHN9FQIqaxNnbuwUQqhY15e9fDUGSMNPyPW8oK1eI_YhfgwW1F2JnmkmIVloEBIt1gJ3FaYSUgVz3d0zhP7E6nN_EB/w612-h469/booklist2.png" width="612" /></a></div><div><br /></div><div>③カレンダー表示</div><div> 右欄にもヒントとして表示されていましたが、「!」を入力すると、カレンダーが表示されます。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtJ5zHhduBnkA6Kq1v9Gxh0EC-kAOGRzJpVDf_1NQh2g8-e5Rrw5sFPORw89sRnfbQP_B9VrNA1QBYQzzzrkqx6YPFpQuZ15aE_Wy8CxplDUhRUtppSctHjWC-VYIyycwkqb0J90knhTLCyLYwdUVO3w2a9Kigx3AsW_FzT4x72dOL9KYlsVze1jBDfDf/s1293/booklist3.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="992" data-original-width="1293" height="445" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtJ5zHhduBnkA6Kq1v9Gxh0EC-kAOGRzJpVDf_1NQh2g8-e5Rrw5sFPORw89sRnfbQP_B9VrNA1QBYQzzzrkqx6YPFpQuZ15aE_Wy8CxplDUhRUtppSctHjWC-VYIyycwkqb0J90knhTLCyLYwdUVO3w2a9Kigx3AsW_FzT4x72dOL9KYlsVze1jBDfDf/w578-h445/booklist3.png" width="578" /></a></div><div><br /></div><div>④ズーム</div><div> ハンバーガーの右隣にあるZoom inというアイコンをクリックすると、</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4haAqbBhjP3kB4Zf99q98Cd776cEDKtRWj7H5qS8VVDs7D4DLulpt51jVeB6uw4q73Re4-bzWsxAeZX_V688eB3UO1HcEalEcHaTtbbWJIzH5AO8Ho_S-N0ixNozi-UqG3le6FGPXgW3bX-ukjNsl1ISkLneV7lsYsel8M7nAEFftVtxt7Vn0HmMAFLcB/s1292/diary1.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="992" data-original-width="1292" height="451" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4haAqbBhjP3kB4Zf99q98Cd776cEDKtRWj7H5qS8VVDs7D4DLulpt51jVeB6uw4q73Re4-bzWsxAeZX_V688eB3UO1HcEalEcHaTtbbWJIzH5AO8Ho_S-N0ixNozi-UqG3le6FGPXgW3bX-ukjNsl1ISkLneV7lsYsel8M7nAEFftVtxt7Vn0HmMAFLcB/w587-h451/diary1.png" width="587" /></a></div><div><br /></div><div>その項目が全体表示されます。</div><div>パンくずリストから戻れるのも便利ですね!</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgor9H5Gms28DifbfbRl-Kvpvjo0YCPfhcYbt6Cc3V-_FesP_-Uf44zoGoOw5f6d_w4NZ2tjGwYK-wQ8Eid9_rv6-DMQldzswNnAHPAWK6DAI0E64QlOuBlRoPcxxg2mqiH8S_RRJRw15du8TdBEJNMHYuIrO41xXJepaQt76BM3C1A5jQwBCJ63ie2hTVu/s1293/diaryzoom.png" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="994" data-original-width="1293" height="471" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgor9H5Gms28DifbfbRl-Kvpvjo0YCPfhcYbt6Cc3V-_FesP_-Uf44zoGoOw5f6d_w4NZ2tjGwYK-wQ8Eid9_rv6-DMQldzswNnAHPAWK6DAI0E64QlOuBlRoPcxxg2mqiH8S_RRJRw15du8TdBEJNMHYuIrO41xXJepaQt76BM3C1A5jQwBCJ63ie2hTVu/w613-h471/diaryzoom.png" width="613" /></a></div><div><br /></div><div>⑤検索</div><div> エディタ部分の虫眼鏡アイコンから、検索もできます。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisl9lehLSKlvyDs_SxD5QC6IQ_wO6wjksv_Dwk6ugCAg_SxHHWFGPyUBFxOhtrRZrwlU9KoooJRd8cJ1jQd9hb9QlrcS3rWGXYURD_Mx7nbWdFcb1Sv5O0Hu79gu5tuIcRzBOhBcPLEwr6eLoXOkNYG1Cu61W9P8WHEBilKMQ-McYpcYITjLgwrd-9znOw/s1296/search.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="994" data-original-width="1296" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisl9lehLSKlvyDs_SxD5QC6IQ_wO6wjksv_Dwk6ugCAg_SxHHWFGPyUBFxOhtrRZrwlU9KoooJRd8cJ1jQd9hb9QlrcS3rWGXYURD_Mx7nbWdFcb1Sv5O0Hu79gu5tuIcRzBOhBcPLEwr6eLoXOkNYG1Cu61W9P8WHEBilKMQ-McYpcYITjLgwrd-9znOw/w614-h470/search.png" width="614" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: normal;">感想</span></h4></div><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;">今回は、Dynalistというアウトライナーをご紹介しました。</span></div><div><span style="font-weight: 400;">肝心の「メモを整理整頓して、定期的にチェックする」という目的のためには、</span></div><div><span style="font-weight: 400;">これを使い続けられるか?という点が一番重要ですよね。</span></div><div>もう少しこれを習慣化して、次回ご報告します。</div><div>やっぱり違うなと思ったら、別のツールについて記事を作っているかもしれません...</div><div><br /></div><div>ご覧いただいてありがとうございました。</div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><div></div><p></p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-86100004104995804442023-09-17T22:38:00.001+09:002023-09-18T07:26:56.536+09:00「MX MASTER 2S」が不調なので修理してみた<p></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgzpcMs_HW1Qjsxy4jig1nRGfQuxiOubs1vckwleIXQusM2ENjpqucJ5hfQ9EVZxo03zN4RkHLE2zmINYzeQqkE9q33dIJqg8TzQiZwSWm5ojuiHgPMgUPhGNnwWU0FsoFNT4kw7H0GIBeTh5s5dYWn544oK4ZNg3PnC4XYa199pz-n35dt4OGJlmOntHM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1185" data-original-width="1574" height="301" src="https://blogger.googleusercontent.com/img/a/AVvXsEgzpcMs_HW1Qjsxy4jig1nRGfQuxiOubs1vckwleIXQusM2ENjpqucJ5hfQ9EVZxo03zN4RkHLE2zmINYzeQqkE9q33dIJqg8TzQiZwSWm5ojuiHgPMgUPhGNnwWU0FsoFNT4kw7H0GIBeTh5s5dYWn544oK4ZNg3PnC4XYa199pz-n35dt4OGJlmOntHM=w400-h301" width="400" /></a></div></div><p></p><p>こんにちは、やっまむーです。</p><p>先日、自宅で使用しているマウス「MX MASTER 2S」が急に動かなくなりました。<br />ポインタが動かず、しかしクリック操作やスクロールは問題なし。<br />電源を入れなおしたり、無線の接続設定を見直したりと試しましたがうんともすんともポインタは動きません。</p><p>キーボード操作のみを駆使して調べてみると、どうやら内部パーツの劣化により一部のボタンが押しっぱなしになっていることが原因のようです。<br />保証書を確認すると2017年に購入しており、6年間使い続ければ仕方ないなとも思います。</p><p>ただ、同等品の「MX MASTER 3S」は1万円を超える価格なのでポンとお金を出すのを躊躇してしまいます。<br />さらに調べてみると、同様の現象に悩まされて自己修理をしたという記事を見つけましたので、今回はそれにならって私も修理してみました。</p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size: 22px; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">分解と修理手順</span></span></h4><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">使う工具は大きく3つです。</span></span></p><p style="text-align: left;"></p><ul style="text-align: left;"><li><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">カッターナイフ(ソール剥がし用)</span></span></li><li><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">T型トルクスドライバーのT5サイズ</span></span></li><li><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">プラスドライバーのNo.0サイズ</span></span></li></ul><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">まずはマウスの滑りをよくするソールをカッターナイフで剥がします。
刃先を隙間に差し込んで剥がしていきます。
今回、ソールを再利用するため破損しないようにゆっくりと、また接着面をできるだけ触れないようにピンセットも使っています。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj8uWjjHTwdt5RRWI9wLrNSd9T_FSwL9A8UE3S1XZpUCYr78hnB0qlN1zlihLvH0Keq_0SeCkwZTEjfb_4r4MhlTn9bGSds-6JPjBv_8iYEGzFGzDqdRSc4uBubcwBjfWnl3W79CpH_BJ9AYejo-uREL1bJupn3B3Zj1-jsouNYJPBUdYdAIy3fKy9mrFM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1185" data-original-width="1574" height="301" src="https://blogger.googleusercontent.com/img/a/AVvXsEj8uWjjHTwdt5RRWI9wLrNSd9T_FSwL9A8UE3S1XZpUCYr78hnB0qlN1zlihLvH0Keq_0SeCkwZTEjfb_4r4MhlTn9bGSds-6JPjBv_8iYEGzFGzDqdRSc4uBubcwBjfWnl3W79CpH_BJ9AYejo-uREL1bJupn3B3Zj1-jsouNYJPBUdYdAIy3fKy9mrFM=w400-h301" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">ソールがあった個所はプラスドライバー、マウスの先端部はトルクスドライバーを使って外します。
自宅にトルクスドライバーが無かったので、急遽精密ドライバーのセットをAmazonで購入しました。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhIjjcVmrialGAqWoVF3pkPoxjKdQ6uWa8KsOB8UcpnmJiV0jQ5Q4IV7qAVr2nHu6y23RAeZMsScVKNqHbBhZfVtYqe8s3YVAFk3VHFClRRn3aVwkbm8h7e3gZmCRKXiu7z1I4wQZiGfnBAL0PH-Sm6gY7FtOZA1fEJhCOdRWWK1KmvG0xQXgdOsIP3AtU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1185" data-original-width="1574" height="301" src="https://blogger.googleusercontent.com/img/a/AVvXsEhIjjcVmrialGAqWoVF3pkPoxjKdQ6uWa8KsOB8UcpnmJiV0jQ5Q4IV7qAVr2nHu6y23RAeZMsScVKNqHbBhZfVtYqe8s3YVAFk3VHFClRRn3aVwkbm8h7e3gZmCRKXiu7z1I4wQZiGfnBAL0PH-Sm6gY7FtOZA1fEJhCOdRWWK1KmvG0xQXgdOsIP3AtU=w400-h301" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">ネジを外して中身を開けるとこのようになっています。
フレキケーブルが繋がっているので勢いよく開けると断線の可能性もあります。
</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjaMKVaEOfDfjh7YwS4r0MqiHqkcTrX8NaIDRJR3lDYfU-sL5fRiETUd1FSdOv2NU6Qek_d75-y--BVKef1pjCjmpd3DKEInY0xzwJsy4ov9IzFTGDl7FS7VYIh6j8Y3wt0u1LZUssFHK8nmKS6QudSR7KmMJfClJTdtY08YuMHNmes8zw01WzA0FT_5mY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1185" data-original-width="1574" height="300" src="https://blogger.googleusercontent.com/img/a/AVvXsEjaMKVaEOfDfjh7YwS4r0MqiHqkcTrX8NaIDRJR3lDYfU-sL5fRiETUd1FSdOv2NU6Qek_d75-y--BVKef1pjCjmpd3DKEInY0xzwJsy4ov9IzFTGDl7FS7VYIh6j8Y3wt0u1LZUssFHK8nmKS6QudSR7KmMJfClJTdtY08YuMHNmes8zw01WzA0FT_5mY" width="398" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">今回、親指部分にあるジェスチャーボタンが押されっぱなしになっています。
この部分のネジを緩めることで、ボタンと基盤のスイッチ部に隙間を作ってやります。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">作業完了後は元通りにねじ止めしてソールを張り付けて完成。
電源を入れると、無事にマウスが動くようになりました。<br /></span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">今回保障期間も過ぎており、最悪買い替えればと考えて分解修理をしました。
皆さんも壊れた機器があれば自分で修理してみてはいかがでしょうか。</span></span></p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">キーボードでマウスを操作する</span></span></h4><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">ちなみに予備マウスがないため、調べるときはキーボード操作のみで行っていました。
その中で、どうしてもマウス操作が必要な時は「アクセシビリティ マウスの設定」でテンキーによるマウス操作を使いました。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">Windowsキーを押して、「アクセシビリティ マウスの設定」と検索すると設定が出てきます。<br /></span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiw15hjGBCELYK_tfyeJEsQjfdw3M0KLOUKK8XDDtvZsXq1vFP0c0LAgy6cM8VQykWrm131bqhJ8qUkpWT17bvv4dFo14OUiuvJXrTGg26W0cIhloXWdCBEbcgw88poz4cNbi-rnt1PerpeI5VAIVYjX_A8eTGROPSy65P52xbf2Qhhpy6qdOVRHRAqelE" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="750" data-original-width="800" height="375" src="https://blogger.googleusercontent.com/img/a/AVvXsEiw15hjGBCELYK_tfyeJEsQjfdw3M0KLOUKK8XDDtvZsXq1vFP0c0LAgy6cM8VQykWrm131bqhJ8qUkpWT17bvv4dFo14OUiuvJXrTGg26W0cIhloXWdCBEbcgw88poz4cNbi-rnt1PerpeI5VAIVYjX_A8eTGROPSy65P52xbf2Qhhpy6qdOVRHRAqelE=w400-h375" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">タブキーを押して「マウス キー機能」まで移動して設定をオンにすると、テンキーでポインタを操作できるようになります。
普段使う機会はないと思いますが、もしもの時は使ってみることをお勧めします。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBZLHB_zSO9Hhre_bl6l2pj4oPnw4nkbj9A0FZxIv4R_9aBzBWmzM0nGPaVwsPgO0XfbyQy72sZLX2R-i5OKiRcsO-1ajFExzocTOeZkU6fAHpPClFK-1Kg2nBlUJD-tmdllIpM1JW76Wpr638VghqNpvGXY6SlXG01BjIb5OViKMJLs4kDPSO-rN3gW8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="944" data-original-width="1256" height="301" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBZLHB_zSO9Hhre_bl6l2pj4oPnw4nkbj9A0FZxIv4R_9aBzBWmzM0nGPaVwsPgO0XfbyQy72sZLX2R-i5OKiRcsO-1ajFExzocTOeZkU6fAHpPClFK-1Kg2nBlUJD-tmdllIpM1JW76Wpr638VghqNpvGXY6SlXG01BjIb5OViKMJLs4kDPSO-rN3gW8=w400-h301" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">ではではー。</span></span></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-33387622205229304052023-09-03T23:25:00.000+09:002023-09-03T23:25:17.833+09:00[Python]Tkinter Treeviewの値取得でゼロ落ち<p>こんばんは。ざわです。</p><div>Pythonで実装したツールで、画面の一覧データをCSVファイルに出力したら</div><div>頭に0(ゼロ)がついているデータの 0部分がゼロ落ちして出力される現象がありました。</div><div>GUIにtkinter、一覧(表)は tkinter.ttk.Treeview ウィジェットを使っています。</div><div>原因など調べてみた結果と対応策について書いていきたいと思います。</div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: 400;">現象</span></h4><p style="text-align: left;">ゼロ落ち現象となるサンプルコードはこちらになります。</p></div><div class="code-toolbar"><pre class="line-numbers language-sequence"><code class="language-sequence"># サンプルコード
import tkinter as tk
from tkinter import ttk
import pandas as pd
# CSV出力ボタン押下
def btnCsvOutput_Click():
data = [tree.item(item)['values'] for item in tree.get_children()]
df = pd.DataFrame(data)
df.to_csv('sample.csv', encoding='shift-jis', header=False, index=False)
# メインウィンドウ生成
root = tk.Tk()
root.title('sample')
root.geometry('400x300')
# Treeview
column = ('ID', 'Name')
tree = ttk.Treeview(root, columns=column)
# 列設定
tree.column('#0',width=0, stretch='no')
tree.column('ID', anchor='w', width=100)
tree.column('Name',anchor='w', width=100)
# 列見出し設定
tree.heading('#0',text='')
tree.heading('ID', text='ID',anchor='w')
tree.heading('Name', text='Name', anchor='w')
# レコード追加
tree.insert(parent='', index='end', iid=0 ,values=('00001', 'AAAAA'))
tree.insert(parent='', index='end', iid=1 ,values=('00100', 'BBBBB'))
tree.insert(parent='', index='end', iid=2 ,values=('000XXXXX', 'CCCCC'))
# ウィジェット配置
tree.pack(pady=10)
btnCsvOutput = tk.Button(root, text='CSV出力', width=10, command=btnCsvOutput_Click)
btnCsvOutput.pack(pady=10)
root.mainloop()
</code></pre></div><div><br /></div><div>これを実行した画面がこちら。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz057AeUTOh9LsJ_Wde-SGYJ3nlpG_pRoVXBRLrBImjTRCX3Ox3HzLsVJRNIKknz1lWSPUyS1yGzVPL8bQSlia2Fg-351bw6_mk7RmYsEtavH93GX7dBykkiCU1ICTdU3M7NGVSAX0u1fnd1oZwZKNb6O1iQE6QaJMyq8ktgiEM8lkewMfeXVCtmKvbdNB/s603/01.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="498" data-original-width="603" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz057AeUTOh9LsJ_Wde-SGYJ3nlpG_pRoVXBRLrBImjTRCX3Ox3HzLsVJRNIKknz1lWSPUyS1yGzVPL8bQSlia2Fg-351bw6_mk7RmYsEtavH93GX7dBykkiCU1ICTdU3M7NGVSAX0u1fnd1oZwZKNb6O1iQE6QaJMyq8ktgiEM8lkewMfeXVCtmKvbdNB/s320/01.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div>CSV出力した結果がこちら。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnumEZEZ9W6j1A1Opd3rTGeW0wylZBrItcOFwyr9buWMkmjNRMRzXia4EwswFjv7anxVtKmltO0xkufreBt-34G33w8bF8c9hBHvipxiJjbW_yh8zNZbKSc_PVeN9Ouv8mhcJSOKXLISycMASxTTVs_9I5claqfXeKKYEEWBGYBiWFhaYozgRg9PrxZEMX/s877/02.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="877" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnumEZEZ9W6j1A1Opd3rTGeW0wylZBrItcOFwyr9buWMkmjNRMRzXia4EwswFjv7anxVtKmltO0xkufreBt-34G33w8bF8c9hBHvipxiJjbW_yh8zNZbKSc_PVeN9Ouv8mhcJSOKXLISycMASxTTVs_9I5claqfXeKKYEEWBGYBiWFhaYozgRg9PrxZEMX/w400-h185/02.png" width="400" /></a></div><br /><div>画面の表のID列には コードの29~31行目のレコード追加処理で書いた通り 0がついた状態で表示されていますが、</div><div>CSVには 0が消えて出力されています。</div><div>ただ、CSVの3行目のように 数値以外の文字が含まれる場合はゼロ落ちしていません。</div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: 400;">対応方法</span></h4><p style="text-align: left;">さて、何が原因でどう修正したらいいかなと調べた結果、<a href="https://stackoverflow.com/questions/67543314/why-are-the-digit-values-in-the-tkinter-items-integers-and-not-strings-even-when" rel="nofollow" target="_blank">こちらのサイト</a>が参考になりました。</p><p style="text-align: left;">(フォーマットして0埋めしたら?というご意見もあると思いますが桁数が固定でないためフォーマットでは対処できず・・)</p></div>原因は、tkinter.ttk.Treeviewでは、整数に変換できる文字列は整数に変換してしまうようで、<div>それに該当するのが ttkの _convert_stringval()関数(*1)のようです。<div><br /></div><div><div>参考サイトでは、</div><div>自身のコードに、条件文によって整数に変換しない _convert_stringval()関数を実装し、</div><div>ttk._convert_stringvalをその関数で置き換えるようにしています。(*2)</div></div><div><br /></div><div>*1:ttk.py の元の関数</div>
<div class="code-toolbar">
<pre class="line-numbers language-sequence"><code class="language-sequence">def _convert_stringval(value):
"""Converts a value to, hopefully, a more appropriate Python object."""
value = str(value)
try:
value = int(value)
except (ValueError, TypeError):
pass
return value
</code></pre></div><div><div> ttk.py はPythonのインストール先の tkinterフォルダにあります。</div><div> (例 : C:\Users\{ユーザID}\AppData\Local\Programs\Python\Python310\Lib\tkinter)</div></div><div><br /></div><div>*2:上記のサンプルコードに _convert_stringval()関数を追加した例</div>
<div class="code-toolbar">
<pre class="line-numbers language-sequence"><code class="language-sequence"># サンプルコード
import tkinter as tk
from tkinter import ttk
import pandas as pd
def _convert_stringval(value):
"""Converts a value to, hopefully, a more appropriate Python object."""
if hasattr(value, 'typename'):
value = str(value)
try:
value = int(value)
except (ValueError, TypeError):
pass
return value
ttk._convert_stringval = _convert_stringval
# CSV出力ボタン押下
def btnCsvOutput_Click():
data = [tree.item(item)['values'] for item in tree.get_children()]
df = pd.DataFrame(data)
df.to_csv('sample.csv', encoding='shift-jis', header=False, index=False)
# メインウィンドウ生成
root = tk.Tk()
root.title('sample')
root.geometry('400x300')
(以下略)
</code></pre></div><div><br /></div><div>6~14行目に _convert_stringval()関数を追加しています。</div><div>(この関数は、ttkのimport後、ttk.Treeviewを使用するコードより前に追加すること)</div><div>8行目の if文が元関数から変更(追記)したコードになります。</div><div>16行目で ttk._convert_stringval を自身の関数で置き換えています。</div><div><br /></div><div>これを実行してCSV出力した結果がこちら。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHsuU2dqGyv7kQl2205jMvPOqikeErL0zUUE5D83VrRWaFqz8rK3IlggRq7-Kb4ME6W5hv_7c0yApAYS9EB3vj-Z9Jr85VMIMN7bl2GPeOlpPZl2FaSJKs490pV9V9W4kVgdcmjXfaEYyuuunbsPpLN_agej1bOBbV3fSTQcrLm6z-S2mtpK71ep2VvRY2/s879/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="407" data-original-width="879" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHsuU2dqGyv7kQl2205jMvPOqikeErL0zUUE5D83VrRWaFqz8rK3IlggRq7-Kb4ME6W5hv_7c0yApAYS9EB3vj-Z9Jr85VMIMN7bl2GPeOlpPZl2FaSJKs490pV9V9W4kVgdcmjXfaEYyuuunbsPpLN_agej1bOBbV3fSTQcrLm6z-S2mtpK71ep2VvRY2/w400-h185/03.png" width="400" /></a></div><br /><div>ID列のデータがゼロ落ちせず、正しく出力されるようになりました。</div><div><br /></div><div>ここまで、ttk._convert_stringval()関数を変更する方法を書いてきましたが、</div></div><div>他のコードに影響を及ぼしそうでttkの関数を変更したくない、という場合もあるかと思います。</div><div>そういった場合の対応案として、Treeviewにinsertする時点でデータを pandasのDataFrameにセット(保持)しておき、</div><div>CSV出力処理時に Treeviewから出力データを取得するのではなく、保持したDataFrameデータを出力すればいいかと思います。</div><div><br /></div><div>それではまたー。</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-25503294446122987022023-08-18T09:00:00.003+09:002023-08-18T09:00:00.146+09:00Xamarinプロジェクトのエラーを解決してみた!<div style="text-align: left;">数年前に作成したVisual Studio 2019のXamarinプロジェクトを、まっさらなパソコンでビルドしたところ、いくつかエラーが発生しました。その解決メモです。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">.NETのインストール</span></h4><div><br /></div></div></div><div style="text-align: left;">まず、下記のエラーが発生し、プロジェクトが「アンロード済み」となり、読み込まれませんでした。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div><div><div style="background-color: black;"><span style="color: white;"><br /></span><span style="color: white;">error : プロジェクト ファイルを開けません。 </span></div><div style="background-color: black;"><span style="color: white;">.NET SDK バージョン 7.0.304 では、MSBuild バージョン 17.4.0 以上が必要です。</span></div><div style="background-color: black;"><span style="color: white;">現在利用可能な MSBuild のバージョンは 16.11.2.50704 です。</span></div><div style="background-color: black;"><span style="color: white;">global.json で指定した .NET SDK を、現在利用可能な MSBuild バージョンが求められる古いバージョンに変更します。</span></div><div style="background-color: black;"><br /></div></div><div style="background-color: black;"><span style="color: white;"></span></div><br /></div><div>プロジェクトのターゲットフレームワークは「.NET Standard 2.0」です。</div><div>下記のサイトに</div><div><br /></div><div>・<a href="https://learn.microsoft.com/ja-jp/dotnet/standard/net-standard">.NET Standard</a></div><div><br /></div><div><i><b>netstandard がターゲットの既存のコードの場合は、TFM を net5.0 から net6.0 に変更する必要はありません。</b></i></div><div><i><b> .NET 5 と .NET 6 により、.NET Standard 2.1 以前が実装されます。</b></i></div><div><br /></div><div>と書かれています。</div><div><br /></div><div>Visual Studio 2019では、.NET 6以降は正式にサポートされていないため、(すでにサポートは終了していますが).NET 5をインストールする必要があります。Visual Studio Installerを使ってはうまくインストールできなかったため、.NET 5のダウンロードサイトからダウンロードし、インストールしました。</div><div><br /></div><div>ちなみに、エラー内容にある「.NET SDK バージョン 7.0.304」は、Visual Studio 2022のインストールで「.NETマルチプラットフォームアプリのUI開発」をチェックした際に、インストールされたSDKです。</div><div><br /></div><div><div><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">JDKのインストール</span></h4><div><br /></div></div></div><div>次に、Xamarin.Androidプロジェクトをビルドすると、下記のエラーが発生しました。</div><div><br /></div><div><div><div><div style="background-color: black;"><span style="color: white;"><br /></span><span style="color: white;">$(TargetFrameworkVersion) v12.0 を使用するときには、Java SDK 11.0 以上が必要です。</span></div><div style="background-color: black;"><br /></div></div><div style="background-color: black;"><span style="color: white;"></span></div><br /></div><div>まっさらな環境なので、JDKもインストールしていません。</div><div>下記のダウンロードページからOpenJDK 11をダウンロードし、インストールします。</div><div><br /></div><div>・<a href="https://learn.microsoft.com/en-us/java/openjdk/download">Download the Microsoft Build of OpenJDK</a></div><div><br /></div><div>そして、[ツール] > [オプション] > [Xamarin] > [Android 設定]の「Java Development Kit の位置情報」から「JDK 構成」を開き、インストールしたJDK11のパスを指定します。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJqnHRc14pXYXStr8-8XPvcfjlrdMynlwVPqX6YtAsdXJfsMvXNyGu6V4vrYItNAXwpdqbJ6ByV32tB9rUqm0ywNdStfLx0eE8gM7Wb7Kbxq7TuKurtlWoPNR8D_lYSrkroHJdMRm8EW2dhBTD8hFEsM0Xu67-_O9PpncFNnB116ac6wpttm0Ea216oJc/s600/%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%202023-08-08%20152826.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="600" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJqnHRc14pXYXStr8-8XPvcfjlrdMynlwVPqX6YtAsdXJfsMvXNyGu6V4vrYItNAXwpdqbJ6ByV32tB9rUqm0ywNdStfLx0eE8gM7Wb7Kbxq7TuKurtlWoPNR8D_lYSrkroHJdMRm8EW2dhBTD8hFEsM0Xu67-_O9PpncFNnB116ac6wpttm0Ea216oJc/s320/%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%202023-08-08%20152826.png" width="320" /></a></div><div><br /></div><div>残念なことに、VS2019の仕様なのかバグなのか、VS2019を終了するとこの設定は元に戻ってしまい、起動するたびに再設定しなくてはなりません。。。</div><div><br /></div><div><div><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">Android SDKのインストール</span></h4><div><br /></div></div></div><div>ビルドすると、まだエラーが発生します。</div></div><div><br /></div><div><div><div><div style="background-color: black;"><span style="color: white;"><br /></span><span style="color: white;">API レベル 31 の android .jar が見つかりませんでした。</span></div><div style="background-color: black;"><span style="color: white;">これは、API レベル 31 の Android SDK プラットフォームがインストールされていないことを意味します。Android SDK マネージャー ([ツール] > [Android] > [Android SDK マネージャー...]) にインストールするか、インストールされている API バージョンを対象とする Xamarin.Android プロジェクトを変更します。(C:\Program Files (x86)\Android\android-sdk\platforms\android-31\android.jar がありません。)</span></div><div style="background-color: black;"><br /></div></div><div style="background-color: black;"><span style="color: white;"></span></div><br /></div><div>API レベル 31、つまりAndroid 12が必要です。</div><div>ところが、Android SDK マネージャーを開いても、Android 12が表示されません。</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG1X1ysjMIhKK2kUIKLndvajekv5tISySvBTk7RQRLBZ2YdCAdQ8awc4vWlGAjLHyak0_ru-eKRSt6XyQj5rRo0zl1OBpXb4hbOERAaTWyGgj452kXXFs_wkUFBjeKpVw333kadXhTF71TzvSvAljwqmoTYMbp5g2K66-9OYp02svnmGS6JuyRwLrsCM8/s877/asdk.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="877" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG1X1ysjMIhKK2kUIKLndvajekv5tISySvBTk7RQRLBZ2YdCAdQ8awc4vWlGAjLHyak0_ru-eKRSt6XyQj5rRo0zl1OBpXb4hbOERAaTWyGgj452kXXFs_wkUFBjeKpVw333kadXhTF71TzvSvAljwqmoTYMbp5g2K66-9OYp02svnmGS6JuyRwLrsCM8/s320/asdk.png" width="320" /></a></div><br /><div>下部の歯車アイコンを押下し、[リポジトリ] > [Google(サポート対象外)]の方を選択すると、「Android 12.0」が表示されるので、チェックしてインストールします。</div><div>これで無事にビルドすることができました。</div><div><br /></div><div><br /></div><div>またいつか、どこかで。</div></div>つじhttp://www.blogger.com/profile/12845659453896114379noreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-39756179140966171852023-08-04T09:00:00.022+09:002023-08-04T09:00:00.139+09:00PHPの学習ノート②-DB接続の方法まとめ<p><br /></p><p>こんにちは、せんです。</p>
<p>PHPの学習ノート第2回です。</p><p> </p><p><a href="https://aimek-developer.blogspot.com/2023/06/php.html">前回の記事:環境構築</a></p>
<p><br /></p><p>第2回はDB接続です。 </p><p>定番のPDOを含む合計4種類の方法について、簡単な使い方と使ってみた感想を記録します。 </p><p>※DBはPostgreSQLを使用</p><p>※この記事ではphp.iniの編集など、細かい説明を省略しています。</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">①PostgreSQL関数を使用する。</span></h4><div>
<p><br /></p><p>PHPのライブラリから提供される、pg_connect、pg_query、pg_fetch_allといった関数です。</p><p>PostgreSQL以外のDBについても、mysqli_connect、oci_executeなどが用意されており、使うDBに対応したメソッドを使います。</p><p><br /></p>
<p>基本の書き方はこんな感じ。</p><p>引数にSQLを直接書くスタイルです。</p><p><br /></p><pre class="prettyprint"><span style="font-family: verdana;">$conn = pg_connect("host=localhost port=5432 dbname=testdb user=postgres password=***");
$result = pg_query($conn, "select * from books");
while ($row = pg_fetch_row($result)) {
echo "id:$row[0] title:$row[1] writer:$row[2]<br/>";
}
pg_close($conn);</span></pre><div><p><br /></p></div><div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">②PDOを使用する。</span></h4><div><br /></div>
<p>PostgreSQL関数を1番に持ってきましたが、検索するとPDOに関する記事が最も多く、現在最も定番の方法のようです。</p><p>PDOとは「PHP Data Objects」の略。</p><p>PHP5.1から使えます。</p><div><br /></div><p>「PDOのメリット=共通のメソッドを使用するのでDBを変更しても修正が楽」という説明が非常に多いのですが、</p><p>それでは決め手にならないんじゃないか…と思うので、ほかの違いも見てみましょう。</p>
<p>基本の書き方はこんな感じです。</p><p>こちらも引数に直接SQLを書きます。</p><p>PDOクラスのオブジェクトを生成して接続します。</p><p><br /></p><pre class="prettyprint"><span style="font-family: verdana;">try {
$dbh = new PDO('pgsql:dbname=testdb host=localhost port=5432 user=postgres password=***');
$sql = 'select * from books';
foreach ($dbh->query($sql) as $row) {
print "id:$row[0] title:$row[1] writer:$row[2]<br/>";
}
} catch (PDOException $e) {
print('Error:' . $e->getMessage());
die();
}
$dbh = null;
</span></pre>
<p><br /></p><p>例外はPDOExceptionとしてキャッチされるので、try-catchで書けます。
基本は上の通りです。</p><p>PDOについて調べると、プリペアドステートメントを使用した書き方も登場します。</p><p>INSERT処理を見てみましょう。</p><p><br /></p><pre class="prettyprint"><span style="font-family: verdana;">$sql = "insert into books (title, writer) values (:title, :writer)";
$stmt = $pdo->prepare($sql);
$params = array(':title' => '赤毛のアン', ':writer' => 'モンゴメリ');
$stmt->execute($params);</span></pre><p><br /></p><p>values句で、あとから値をセットするプレースホルダ(:〇〇)を使っています。</p><p>SQLインジェクション対策として「PDO+プリペアドステートメント+プレースホルダ」は頻出のセットですが</p><p>PostgreSQL関数にもpg_query_paramsという関数があり、これを使えば同じことができそうです。</p><p><a href="https://www.php.net/manual/ja/function.pg-query-params.php">PHP公式ドキュメント</a></p>
<p>MySQLの場合はmysqliクラスを使ってPDOと同じように書く方法もあります。</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">③Idiormを使用する。</span></h4><div><br /></div>
<p>オブジェクトを操作するようにDBを操作するORMのライブラリです。</p><p>ORMなどのキーワードを追加して初めて検索結果に出てくるレベルです。</p><p>2011年に登場しました。</p><p>idiorm.phpの1ファイルを追加するだけなので、フレームワークを使用するより簡単かつ軽量に実装できる選択肢です。</p>
<p><a href="https://idiorm.readthedocs.io/en/latest/index.html">公式ドキュメント</a></p><p>簡単な使用例はこちら。 SQLは書きません。</p><p><br /></p><pre class="prettyprint"><span style="font-family: verdana;">require_once('../idiorm.php');
ORM::configure('pgsql:dbname=testdb host=localhost port=5432');
ORM::configure('username','postgres');
ORM::configure('password','***');
$books = ORM::for_table('books')->find_many();
foreach ($books as $book) {
echo $book->title . '</br>';
}
$newBook = ORM::for_table('book')->create();
$newBook->title = '長くつしたのピッピ';
$newBook->writer = 'リンドグレーン';
$newBook->save();
</span></pre>
<p><br /></p><p>④のフレームワークと比べるとはるかに簡単に使えますが、 </p><p>複雑なクエリを実行する場合はraw_queryメソッドの引数に直接SQLを指定することになります。</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">④Laravelなどのフレームワークを使用する。</span></h4><div><br /></div>
<p>LaravelをはじめとしたPHPのメジャーなフレームワークには、もれなくORMが含まれています。</p><p>クエリビルダでDB操作を行うこともできますが、
ここではLaravelのORMであるEloquentの基本的なメソッドを見てみましょう。
</p><p><br /></p></div><pre class="prettyprint"><span style="font-family: verdana;">$allBooks = Book::all();
foreach($allBooks as $book){
echo $book->title;
}
$newBook = Book::create([
'title' => '若草物語',
'writer' => 'オルコット'
]);
$updateBook = Book::findOrFail(1);
$updateBook->title = 'Anne of Green Gables';
$deleteBook = Book::findOrFail(2);
$deleteBook->delete();</span></pre>
<p>このコードはControllerクラスに書かれます。BookはMVCのモデルです。</p><p>createメソッドで配列を入れるあたりは見た目にも分かりやすいです。</p><p>ただ、ここまで来るまでが長いので、しっかり勉強してから使いたいです。</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">まとめ</span></h4><div><br /></div><p>DB接続について検索すると、体感8割くらいがPDOに関する記事です。</p><p>それに乗ってPDOを使うにしても、ほかの方法についていくらか知っておきたいものです。</p><p><br /></p><p>すでに使用するフレームワークが決まっている場合はその機能を活かしたいですが、</p><p>そうでなければ①から③で選ぶことになるでしょう。</p><p><br /></p><p>この記事が方法選択のとっかかりになれば幸いです。</p><p>ご覧いただいてありがとうございました。</p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-68007489241613073652023-07-23T22:22:00.001+09:002023-07-24T03:52:03.002+09:00「Google Play Games」を使ってPC上でゲームをする<p>こんにちは、やっまむーです。</p><p>少し前に、Googleから「Google Play Games」のベータ版がリリースされました。<br />これは「Google Play」で提供されているAndroid向けのゲームをWindowsPC上で遊べるようになるものです。<br />スマホ上の小さい画面ではなく、PCの大画面で遊べるということでさっそく使ってみました。</p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">Google Play Gamesのインストール</span></span></h4><p>まずは<a href="https://play.google.com/googleplaygames?pcampaignid=merch-FCC-gpg-titlelaunch-bdz-web">公式サイト</a>から「Google Play Games」のベータ版をダウンロードします。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhyFk4KiYDJttSW08aiqAd8lkrrqMbCQgeibVyjAQO4oMkmvoR1IMPRtCgdZLirRBWKpgYOtSwbLCjptyQNO2uZ3l9c53JDyLd24np3yNQXBcVltn5NHzzzg3wEa3HhwTqrm6dDLDrApmnslj4sJffklkWQ4CDPfkipjv1hrNkyfnqgfPypsAkgWVxFlMw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="533" data-original-width="579" height="368" src="https://blogger.googleusercontent.com/img/a/AVvXsEhyFk4KiYDJttSW08aiqAd8lkrrqMbCQgeibVyjAQO4oMkmvoR1IMPRtCgdZLirRBWKpgYOtSwbLCjptyQNO2uZ3l9c53JDyLd24np3yNQXBcVltn5NHzzzg3wEa3HhwTqrm6dDLDrApmnslj4sJffklkWQ4CDPfkipjv1hrNkyfnqgfPypsAkgWVxFlMw=w400-h368" width="400" /></a></div><p></p><p>ダウンロードしたインストーラーを起動すると、早速インストールが始まります。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjBrnZm0dtboZLdNaq21_84NQAXG2MbvYl59EyXXm8zNGnZtWsP50KL2K6QPzZ3TD5VzTSiB2NWEftxAAUcEjEfTus--RkXMCasDA_kWemT6Lm8hX7C4SlgeTH6w--RbWzKhdh_rN1NwkLrO91cfR_b2PGEj1TOGPfyoLXQWUXqktPLnTAfyDAl2AzTL6Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="263" data-original-width="656" height="160" src="https://blogger.googleusercontent.com/img/a/AVvXsEjBrnZm0dtboZLdNaq21_84NQAXG2MbvYl59EyXXm8zNGnZtWsP50KL2K6QPzZ3TD5VzTSiB2NWEftxAAUcEjEfTus--RkXMCasDA_kWemT6Lm8hX7C4SlgeTH6w--RbWzKhdh_rN1NwkLrO91cfR_b2PGEj1TOGPfyoLXQWUXqktPLnTAfyDAl2AzTL6Q=w400-h160" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi74ohHUm37YbiwJ6TPE7vj5aKClo62lCR3_hjgDpzd1PY1esiMNchjt9PYrs7TxuiiEbUpbZ4USLVasE41rOGZwJXiT_cnCs5ouzpyDAxhgSQRXJ40H9QdBL2eapzD2mUtiwzLvJIKZ49Wa73LqdHH0jvHwRzSpNQXIFsE_NtzbpaJerTjyd5JFX7FSnU" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="263" data-original-width="656" height="160" src="https://blogger.googleusercontent.com/img/a/AVvXsEi74ohHUm37YbiwJ6TPE7vj5aKClo62lCR3_hjgDpzd1PY1esiMNchjt9PYrs7TxuiiEbUpbZ4USLVasE41rOGZwJXiT_cnCs5ouzpyDAxhgSQRXJ40H9QdBL2eapzD2mUtiwzLvJIKZ49Wa73LqdHH0jvHwRzSpNQXIFsE_NtzbpaJerTjyd5JFX7FSnU=w400-h160" width="400" /></a></div></div><p></p><p>インストールが完了すると、自動的に「Google Play Games」が起動します。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgqVAtF4es-jqsF0uWVNw3XH83EKcgaWBHG7LkMxHCiFVmNrSPeUSLYFPf4xP6qtVFxDWpNZtTaPsszdLdnahorp5e_Ut1mrXIW-s4z7ZWSdVFub4qQDela_UAuURNKosdCa8QaMof2PBrdFiy0ngkE32NqwyX0-4JE3efKZHNIHyNXXnO9fPMY9fTlYVI" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="860" data-original-width="1174" height="293" src="https://blogger.googleusercontent.com/img/a/AVvXsEgqVAtF4es-jqsF0uWVNw3XH83EKcgaWBHG7LkMxHCiFVmNrSPeUSLYFPf4xP6qtVFxDWpNZtTaPsszdLdnahorp5e_Ut1mrXIW-s4z7ZWSdVFub4qQDela_UAuURNKosdCa8QaMof2PBrdFiy0ngkE32NqwyX0-4JE3efKZHNIHyNXXnO9fPMY9fTlYVI=w400-h293" width="400" /></a></div><p></p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variation-settings: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space-collapse: preserve;">ログインしてゲームをプレイする</span></span></h4><p>次に「Google Play Games」で使用するアカウントでログインをします。<br />サインインのボタンを押すと次のように使用するアカウントの選択画面が出てきます。<br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhwanNXfjCkF5lX7e5q7jYnyPrwhCKt-l1ar8GYwTNjUt7UPMJVpww7o43jX-d-0jD7Slb9VmgMqE_rddQ0criF-Bt4jDSrW8ANS47G352A4XFyExqQ0KU8T88r4iDeoYXI1NfKA8v7w0QMHnqQD9WXeDnPoCHcScFCatflGkC1ZmDuvYM5TIZtTcpgSIY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="594" data-original-width="473" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEhwanNXfjCkF5lX7e5q7jYnyPrwhCKt-l1ar8GYwTNjUt7UPMJVpww7o43jX-d-0jD7Slb9VmgMqE_rddQ0criF-Bt4jDSrW8ANS47G352A4XFyExqQ0KU8T88r4iDeoYXI1NfKA8v7w0QMHnqQD9WXeDnPoCHcScFCatflGkC1ZmDuvYM5TIZtTcpgSIY=w318-h400" width="318" /></a></div><p></p><p style="text-align: left;">使用するアカウントを選択してログインすると、「Google Play Games」上にそのアカウントの情報が表示されます。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEijMQt7rG-uOnvAKMMKj5OOY3TKyAN5KUMFsMuMbypeXyUPnnhJ9Cx0qqV_eF4oHR2SkxFfc43QYe9BtlyIhFiv5YX1T3VUufw4PKyAo1WOFswzR9KkP4W16soGMMP6Num3dcpFXIIDXwYsJrNdaTeIICF5FkIImQkJY0bGwjpzh3eEJyAAQ1NRfx5-lYM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="680" data-original-width="1026" height="265" src="https://blogger.googleusercontent.com/img/a/AVvXsEijMQt7rG-uOnvAKMMKj5OOY3TKyAN5KUMFsMuMbypeXyUPnnhJ9Cx0qqV_eF4oHR2SkxFfc43QYe9BtlyIhFiv5YX1T3VUufw4PKyAo1WOFswzR9KkP4W16soGMMP6Num3dcpFXIIDXwYsJrNdaTeIICF5FkIImQkJY0bGwjpzh3eEJyAAQ1NRfx5-lYM=w400-h265" width="400" /></a></div><p></p><div><p></p><p></p><p style="text-align: left;">OKを選択した後は、利用規約、データ送信に関するプライバシーの同意をすればログインは完了です。<br /></p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgmZMBGE312wW2tiF9KrxlmoOfzU5lsAGFJ6BtavdbnkdOsmMY-dFJDV6WLknF2kAm6bVhfQjIAssD81GXAABPW7Ooa77mqEeAMbuE0XjHqbBF0zd_CXimkB8cYcJiPPNCQHf_DuDG6X2pVdPmc5peHbSjuONpHjMAIXiJ1tubXs5H8nFp6GIOjuySOo_Q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="680" data-original-width="1026" height="265" src="https://blogger.googleusercontent.com/img/a/AVvXsEgmZMBGE312wW2tiF9KrxlmoOfzU5lsAGFJ6BtavdbnkdOsmMY-dFJDV6WLknF2kAm6bVhfQjIAssD81GXAABPW7Ooa77mqEeAMbuE0XjHqbBF0zd_CXimkB8cYcJiPPNCQHf_DuDG6X2pVdPmc5peHbSjuONpHjMAIXiJ1tubXs5H8nFp6GIOjuySOo_Q=w400-h265" width="400" /></a></div><p></p><p style="text-align: left;">画面右には既に遊んでいるゲームが表示されています。<br />インストールして起動すると、無事にPC上でプレイができました。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiOrMY7rM_uKFY0ES6mUDn-Hexeck_75PNegbCGYkpN58QjYgYk6txFdeAcxSRi2fU5yX3s4nQdrkuLAq4RwjyeA5GLY8QaLwYrpFLifkTSRFwpLB0mgCXzi0wTosXSqrMxvk1B45qwce9I9QOKP_x2lHbFpUevh2298ZimN2_W5EHFKM4H6i0aaIk-d8U" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1068" data-original-width="1844" height="231" src="https://blogger.googleusercontent.com/img/a/AVvXsEiOrMY7rM_uKFY0ES6mUDn-Hexeck_75PNegbCGYkpN58QjYgYk6txFdeAcxSRi2fU5yX3s4nQdrkuLAq4RwjyeA5GLY8QaLwYrpFLifkTSRFwpLB0mgCXzi0wTosXSqrMxvk1B45qwce9I9QOKP_x2lHbFpUevh2298ZimN2_W5EHFKM4H6i0aaIk-d8U=w400-h231" width="400" /></a></div><p></p><p style="text-align: left;">最初はフルスクリーンで始まるので、Shift+Tabでウィンドウモードに切り替えておくことをお勧めします。<br />また、Google Play上でデータを管理するようなゲームであれば、現在のプレイ内容の引継ぎもできるようです。</p><p style="text-align: left;">全てのゲームに対応しているわけではありませんが、有名なゲームもいくつかあります。<br />今後追加される可能性もありますので、よければ一度試してみてはいかがでしょうか。</p><p style="text-align: left;">ではではー。</p></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-36289819291927963652023-07-09T23:30:00.002+09:002023-07-10T00:09:11.424+09:00Windowsでシンボリックリンクを使ってみる<div style="text-align: left;"><div>こんばんは。ざわです。</div><div><br />Googleで「シンボリックリンク」で検索すると、<br />「シンボリックリンクとは、Linux においてコンピューター上にある他のファイルやフォルダを指し示す働きを持つファイルです。<br />英語では symlink とも呼ばれ、Windows におけるショートカットとよく似ています。」とでてきます。</div><div><br />私は、これまでLinuxで使ったことはありますが、Windowsにもシンボリックリンクがあることは知らず、、<br />先日 仕事で使う機会があったので、Windowsのシンボリックリンクについて書いてみたいと思います。</div><div><br /></div><div><div>Windows シンボリックリンクを知った経緯は、</div><div>担当しているシステムで、そのプログラムが参照するxmlファイルのパスが変わることになり、</div><div>(これまではプログラムファイルと同じ環境に配置していたxmlファイルを、サーバ上での管理に変更)</div><div>xmlファイルのパスは設定ファイルで設定しているので、その設定を変更すればいいだけなのですが、</div><div>ちょっとした理由があって、設定は変更せずこれまでのパスのままにしておきたいなぁ、、と。</div></div><div><br /></div><div><div>Linuxであればシンボリックリンクで対応できるけど、と思い</div><div>試しに「Windows シンボリックリンク」で検索してみたらありました!</div></div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: normal;">Windows シンボリックリンク 作成方法</span></h4><div style="text-align: left;"><br /></div><div style="text-align: left;"> ショートカットはエクスプローラー(GUI)で作成できますが、</div><div> シンボリックリンクはできませんので、コマンドプロンプトで作成します。</div><div><ol style="text-align: left;"><li>コマンドプロンプトを起動<br />その際、管理者権限で実行する必要があるので「管理者として実行」で開く。<br /><br /></li><li>mklinkコマンドを実行<br />構文:<br /> mklink {作成するシンボリックリンク名} {リンク元パス}<br /><br />例:<br /> mklink C:\テストプログラム\info\data1.xml C:\リンク元\info\data1.xml<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE6CTrutOZ6nfY86VfRo7fr_DdF1cSSryqsDWTtSf0yKLUrXtB40YVqMUD1kLJw1tRGZie7GB3tiZ0ICzusaQMWvso3emsrVb7_iwR0cZ6AIg-xsPD9O9m8oWN2zdamFK0jdixLVMz-Brrg67lf_BX_flXnRDD51H8yHW_CHDDjn9xFBOdkDn_YigHWPwF/s894/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="170" data-original-width="894" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE6CTrutOZ6nfY86VfRo7fr_DdF1cSSryqsDWTtSf0yKLUrXtB40YVqMUD1kLJw1tRGZie7GB3tiZ0ICzusaQMWvso3emsrVb7_iwR0cZ6AIg-xsPD9O9m8oWN2zdamFK0jdixLVMz-Brrg67lf_BX_flXnRDD51H8yHW_CHDDjn9xFBOdkDn_YigHWPwF/w640-h122/01.png" width="640" /></a></div></li></ol></div></div></div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><div style="text-align: left;"> [C:\テストプログラム\info]配下に、data1.xml というシンボリックリンクが作成されました。</div></div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjgtXJ7ez5WpyIRXDQxlGXzd20C4XOfZJsS19erTHoVQ0Rd75xX7LPTVS8FfWk4THdU2EbXlcJW6xHianRdAmUq2D2axPdtDL8e93UkioqAm-qKFtZNgy2U7BJPwESEYgR-0jU2RDpHPl3b8mSm1uFLjeJverkXt2691_0v8m2Beq-4kN_tsSHQ7cRyeP/s612/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="121" data-original-width="612" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZjgtXJ7ez5WpyIRXDQxlGXzd20C4XOfZJsS19erTHoVQ0Rd75xX7LPTVS8FfWk4THdU2EbXlcJW6xHianRdAmUq2D2axPdtDL8e93UkioqAm-qKFtZNgy2U7BJPwESEYgR-0jU2RDpHPl3b8mSm1uFLjeJverkXt2691_0v8m2Beq-4kN_tsSHQ7cRyeP/w640-h126/02.png" width="640" /></a></div></blockquote><br /><br /><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;">ディレクトリのリンクを作成する場合は、mklinkコマンドのパラメータに [/d]を付けます。<br />構文:<br /> mklink /d {作成するシンボリックリンク名} {リンク元パス}</blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><br />例:<br /> mklink /d C:\テストプログラム\info_link C:\リンク元\info </blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6A8CXBlKQl9QWiHdJCbcoxR9C3Oq-fZlP8P29lJVYSSN_5qiMTjTLB91EY-bz_OMRem96vqweiqMVbjc2WBLGv2YrrBuIsksfmt9-HTa8R2eQcXsEis1zA9lt_ptt21wjxmiPH6dpcLmbEwuYlek47va8KkvPlCEUhVAKUXK1ZBa-h-rJ0i3mVRfqlCvj/s876/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="92" data-original-width="876" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6A8CXBlKQl9QWiHdJCbcoxR9C3Oq-fZlP8P29lJVYSSN_5qiMTjTLB91EY-bz_OMRem96vqweiqMVbjc2WBLGv2YrrBuIsksfmt9-HTa8R2eQcXsEis1zA9lt_ptt21wjxmiPH6dpcLmbEwuYlek47va8KkvPlCEUhVAKUXK1ZBa-h-rJ0i3mVRfqlCvj/w640-h68/03.png" width="640" /></a></div></div></blockquote><div style="text-align: left;"><br /></div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">[C:\テストプログラム]配下に、info_link というシンボリックリンクが作成されました。</div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZQgvAwV1iPtogixO6SnwIH7x-yjSWTZFYnLrxJyXkPpVmnWoCEQEDwwstPmfzFl2NCTrGDVhmedfoqCmM9rvDMSEi-VVQFx_5bB0A477S9nv_nW3K32UWAED8TGJ6jxijvf01lKUlJCKZQoxBkbBN9_IegHZ6ISCP6lJkD6-9R3OWTE1x2Vy5ozOZQMor/s705/04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="145" data-original-width="705" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZQgvAwV1iPtogixO6SnwIH7x-yjSWTZFYnLrxJyXkPpVmnWoCEQEDwwstPmfzFl2NCTrGDVhmedfoqCmM9rvDMSEi-VVQFx_5bB0A477S9nv_nW3K32UWAED8TGJ6jxijvf01lKUlJCKZQoxBkbBN9_IegHZ6ISCP6lJkD6-9R3OWTE1x2Vy5ozOZQMor/w640-h132/04.png" width="640" /></a></div></blockquote><br /><div style="text-align: left;">これで、プログラムの設定ファイルに "C:\テストプログラム\info_link" を設定すれば、</div><div style="text-align: left;">[C:\リンク元\info]下のxmlファイルを参照するようになります。</div><div><br /></div><div>シンボリックリンクは、シンボリックリンク自体を削除しても、元ファイルは削除されませんが、</div><div style="text-align: left;">同期しているのでシンボリックリンクのディレクトリ内のファイルを更新、削除すると元ファイルも更新、削除されます。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">それではまた。</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-45899674486783302642023-06-25T20:30:00.005+09:002023-06-25T20:36:58.316+09:00チャットの共有機能、使ってますか?(ChatGPT)<style type="text/css">
.keyboard-key{background-color:#f9f9f9;background-image:-moz-linear-gradient(center top,#eee,#f9f9f9,#eee);border:1px solid #888;border-radius:2px;box-shadow:1px 2px 2px #ddd;font-family:inherit;font-size:.85em;padding:1px 3px}
table, td, th{ border: 1px solid black; }
</style>
<p> </p>
<p>どうも。ひっくです。</p>
<p>ChatGPT使ってますか?</p>
<p>普段使っている方は既にご存じかと思いますが、チャット内容を共有することが可能となりました。</p>
<p>今回はその方法を紹介します。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqVseTUgZ9DbNeoPnpsM3VjAFNQck8JJTJyiWsuAbEpbIS7-GTSFMrmQ5vVPcuvf3kxubYBOEAGeUF1KjMsqjLb2tzYiqe7BaYTkoQsHk3bnyh7o6yLjpBoNlcSyy3Kc0DlcRD-jRi6zaouz5CG_rbymw67WMhqb4dZ8rRftnnAOIOD2IbsMMwD4LNdMfo/s1600/_5c25f71d-8d86-4b9b-a063-49bdfb6e8df5.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqVseTUgZ9DbNeoPnpsM3VjAFNQck8JJTJyiWsuAbEpbIS7-GTSFMrmQ5vVPcuvf3kxubYBOEAGeUF1KjMsqjLb2tzYiqe7BaYTkoQsHk3bnyh7o6yLjpBoNlcSyy3Kc0DlcRD-jRi6zaouz5CG_rbymw67WMhqb4dZ8rRftnnAOIOD2IbsMMwD4LNdMfo/s1600/_5c25f71d-8d86-4b9b-a063-49bdfb6e8df5.jpg" width="600"></a></div>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">チャット内容の共有手順</span></h4><br>
<p>手順といってもとても簡単です。チャットの履歴を選択して、共有リンクを生成するだけです。</p>
<ol>
<li><p>まず共有したいチャット履歴を選択して、赤枠をクリックします。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGY-yi3MA3NPSEui3h1opTdvyhglwM1XjnPZDZwtpUgknd3l2pQZexnV8ULiiOrDQNeah_hyRMmGdgQ--Pk_gM8X4TQj57rS98n_pb70-XnKbDP6a14TfF6Or6Y6ENCyoBc9BrU1Y1XjmSZqdqeS2GXFJtPtZb2IS266uONkc7Y-Y7JmSM3gdvG1c_oBBF/s1600/image-20230625195503067.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGY-yi3MA3NPSEui3h1opTdvyhglwM1XjnPZDZwtpUgknd3l2pQZexnV8ULiiOrDQNeah_hyRMmGdgQ--Pk_gM8X4TQj57rS98n_pb70-XnKbDP6a14TfF6Or6Y6ENCyoBc9BrU1Y1XjmSZqdqeS2GXFJtPtZb2IS266uONkc7Y-Y7JmSM3gdvG1c_oBBF/s1600/image-20230625195503067.png" width="350"></a></div>
</li>
<li><p>次の様に表示されるので、「Copy Link」をクリックします。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFR05VvbNsE_H3yHH4wLA_MSHD4LK2bp53W2TfCX6Sisr31VBu6g-8fxZ4PQycRi2zOkuNnvwoMVuuGVOHRcfg5Na812g4tCYivL5mSiR-G35q5trZQOY-gFLBBniSQAxSrg06GT9ChxIGXKA7Qh7Ru88m8-v_EjzTfqAkOezW_aZn5mF87IWYN_sRCDe5/s1600/image-20230625195646159.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFR05VvbNsE_H3yHH4wLA_MSHD4LK2bp53W2TfCX6Sisr31VBu6g-8fxZ4PQycRi2zOkuNnvwoMVuuGVOHRcfg5Na812g4tCYivL5mSiR-G35q5trZQOY-gFLBBniSQAxSrg06GT9ChxIGXKA7Qh7Ru88m8-v_EjzTfqAkOezW_aZn5mF87IWYN_sRCDe5/s1600/image-20230625195646159.png" width="650"></a></div>
</li>
<li><p>クリップボードにコピーされたURLを、共有したい人に公開しましょう。</p>
<p>上記で作ったリンクは、こちらとなります。</p>
<p><a href='https://chat.openai.com/share/b73733da-69d1-477b-b8be-9664325b8ee1' target='_blank' class='url'>https://chat.openai.com/share/b73733da-69d1-477b-b8be-9664325b8ee1</a></p>
</li>
</ol>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">上記で公開しているリンクについて</span></h4><br>
<p>画像生成AIで画像を生成するプロンプトの生成プロンプトを作ってみました。</p>
<p>リンクをクリック後、以下の様に表示されます。</p>
<p>「Continue this conversation」をクリックで、ご自身のChatGPT上にチャット内容が展開されます。</p>
<p> </p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh60CRGXMHd7-oaXcTV_RI3-aFweJhPVCI98cs8gjgFziCz8FwfnkFgFL1PL9meLMLDKB9_5pyfSiqDZ-X5dXKaDamivuXbvwf--ChYL8XLKJWRcGAGFV9SDwTrZvllf9GyrnIlpkHdeJlzeazWzEXxu8wzA7e-uZaQjBqnq8mXmo30ic1LO6Z18SYI4pz4/s1600/image-20230625200546466.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh60CRGXMHd7-oaXcTV_RI3-aFweJhPVCI98cs8gjgFziCz8FwfnkFgFL1PL9meLMLDKB9_5pyfSiqDZ-X5dXKaDamivuXbvwf--ChYL8XLKJWRcGAGFV9SDwTrZvllf9GyrnIlpkHdeJlzeazWzEXxu8wzA7e-uZaQjBqnq8mXmo30ic1LO6Z18SYI4pz4/s1600/image-20230625200546466.png" width="650"></a></div>
<p> </p>
<p>上記チャットで作成されたプロンプトをそのまま<a href='https://www.bing.com/create'>Bing Image Creator</a> に貼り付けて作成した最終画像は、タイトル画像に使用してみました。<a href='https://www.midjourney.com/home/'>Midjourney(ミッドジャーニー)</a> でなくても画像生成AIであれば、簡単に画像は生成できます。</p>
<p>チャット内容についてあまり内容は洗練していませんが、簡単に遊んでいただけると思います。</p>
<p>是非試しにプロンプトを作成して、画像を生成してみてください。</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">まとめ</span></h4><br>
<p>まだ共有機能使ったことない、という方向けに今回は共有機能について紹介しました。</p>
<p>こんな凄いプロンプトを作成したよ、こんな発見があったよ、この会話が面白かったよ等、</p>
<p>気づいたことがあれば是非共有機能を利用して、公開したい範囲で共有してみると良いのではないかなと思います。</p>
<p>(こんな使い方もできるのか、と新たな発見もできますし)</p>
<p> </p>
<p>今回はこのへんで。ではまた!</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-20473065808770604252023-06-09T09:00:00.006+09:002023-06-09T09:00:00.129+09:00PHPの学習ノート➀ー環境構築<p><br /></p><p>こんにちは。 せんです。</p><p>しばらく前からphpを使っているのですが、</p><p>いつもピンポイントで調べては作業する形になってしまっているので、</p><p>基礎を確認しつつ、つまったところや気になったところを記録していきます。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw_R-0lB_yrf2TLMJodrgGgfQNWVq4sQ39U6PAU8pa3oI4-dWjwXWoEhPk3HRTTNmX_JWSEktKXjsfmxmn5oEbmiuBZ69R2cq3dbJfd8v3XCbAIjcjegOExET5NvlVfzYgr_bPOm29kVLmrQ1gxvdHBSxEFxWXxX5r2Wa0L5QcJo0QtCNvXoNxaUWrjQ/s180/study_animal_zou.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="180" data-original-width="180" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw_R-0lB_yrf2TLMJodrgGgfQNWVq4sQ39U6PAU8pa3oI4-dWjwXWoEhPk3HRTTNmX_JWSEktKXjsfmxmn5oEbmiuBZ69R2cq3dbJfd8v3XCbAIjcjegOExET5NvlVfzYgr_bPOm29kVLmrQ1gxvdHBSxEFxWXxX5r2Wa0L5QcJo0QtCNvXoNxaUWrjQ/w352-h352/study_animal_zou.png" width="352" /></a></div><br /><p><br /></p><p>今日は、環境構築編です。</p><p>概要は、</p><p>➀ XAMPPをダウンロードする。</p><p>➁ 簡単なphpプログラムを動かしてみる。</p><p>➂ IISでも動かしてみる。</p><p><br /></p><p>php使ってみよ!と思って各サイトを調べると、 </p><p>phpの公式ページからインストールするか、XAMPPを入れるか、 </p><p>いずれかの方法が紹介されています。 </p><p><br /></p><p>当時どんな調べ方をして、どんな経緯でXAMPPにしたのかは忘れましたが(汗) </p><p>私自身はXAMPPをダウンロードするところから始めました。 </p><p>すでによく知られている通り、XAMPPを使って始めればphpのプログラムはかなり簡単に実行できます。 </p><p>今のところ、XAMPPを使っていることによる大きな不自由はありませんが、 </p><p><a href="https://www.sejuku.net/blog/96730">XAMPPを使うメリット、デメリットをまとめてくださっている記事</a>もありますので、ご参考に!</p><p><br /></p><p>XAMPPのAはWebサーバApacheを指しており、</p><p>XAMPPを入れる=Apacheで動かすことになるんですけれども、 </p><p>後からIISも有効にします。 </p><p>Webの知識がなかった当時は、「2種類どちらも使えるのか???」と思っていましたが、 </p><p>無事にどちらも動作させられたので、その過程をまとめます。 </p><p><br /></p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">前置きが長くなりましたが</span></h4><div><br /></div><p><a href="https://www.apachefriends.org/jp/index.html">XAMPP公式サイト</a>からダウンロードします。 </p><p>以下のボタンをクリックするだけです!</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnGaowOTxioZX25H2rY5ZsrVF3sKyQEH8JD2QqUzMueb-mb6rblyuP90KGauUUBf-jnXxNU_Cvml-6IsYgXBTu6zvgQJwTZMK-EDjoGmDuW6fA2Vpnd9EKG7aKu7EE9wpn-cWc05gUTaYxtauVrWhEeY9xwKl_hUYqfsS9Yjs3bJ3-ufRBUrOBrPlcMg/s1392/xampphp.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="855" data-original-width="1392" height="359" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnGaowOTxioZX25H2rY5ZsrVF3sKyQEH8JD2QqUzMueb-mb6rblyuP90KGauUUBf-jnXxNU_Cvml-6IsYgXBTu6zvgQJwTZMK-EDjoGmDuW6fA2Vpnd9EKG7aKu7EE9wpn-cWc05gUTaYxtauVrWhEeY9xwKl_hUYqfsS9Yjs3bJ3-ufRBUrOBrPlcMg/w584-h359/xampphp.png" width="584" /></a></div><p></p><p><br /></p><p>ダウンロードフォルダのxampp-windows-x64-8.2.4-0-VS16-installer.exeをダブルクリック。</p><p>セキュリティの警告が出ればOKして、 </p><p>そのあとも「Next」を選択し続けます。</p><p>以降は以下の設定の通り、パスがC:\xamppであることを前提とします。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EZBAAmmjnMam5qHzwjLtbrIilIUsscYVFB_iG0nGXxMtFcXSuGUSDiUs8vNkr1DW2J9Bp5By2pJ6Jian8bgpJ_7MHKCYY0QXD15MMoZuRPn-VupB_Fu9BOe2Ig6vr4oFgSfG9dtSOgV1hduCg4eyKU4qjj6gVvvPbsZRwyLtAqMwIsfUuHsAb3Ns4A/s626/xamppfolder.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="517" data-original-width="626" height="353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1EZBAAmmjnMam5qHzwjLtbrIilIUsscYVFB_iG0nGXxMtFcXSuGUSDiUs8vNkr1DW2J9Bp5By2pJ6Jian8bgpJ_7MHKCYY0QXD15MMoZuRPn-VupB_Fu9BOe2Ig6vr4oFgSfG9dtSOgV1hduCg4eyKU4qjj6gVvvPbsZRwyLtAqMwIsfUuHsAb3Ns4A/w428-h353/xamppfolder.png" width="428" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p>また、インストール終了画面の前に次のウインドウが表示されますが、 </p><p>今回は「プライベートネットワーク」の方だけにチェックしておきます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5JRoWieyPRTn3YcooPWKNaevXkxHUKyHU3pJZhmuRgS7d2AUYvvIeZkbnOcbr1Bi5I6KcYizultAI8C2JzLeqKVCpc0AUg1nIZNO1TQnxLDbfQoviR4pGWY-uFZzyyYOSlpLJWw2T9C8Izgdm_98WlX_6PnSMcu_egk2nmt5wURLCfgjFJHYsNpdj6g/s766/xamppnw.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="539" data-original-width="766" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5JRoWieyPRTn3YcooPWKNaevXkxHUKyHU3pJZhmuRgS7d2AUYvvIeZkbnOcbr1Bi5I6KcYizultAI8C2JzLeqKVCpc0AUg1nIZNO1TQnxLDbfQoviR4pGWY-uFZzyyYOSlpLJWw2T9C8Izgdm_98WlX_6PnSMcu_egk2nmt5wURLCfgjFJHYsNpdj6g/w506-h356/xamppnw.png" width="506" /></a></div><p></p><p><br /></p><p>終了画面で、そのまま起動するようチェックされていたので、 </p><p>XAMPPが立ち上がりました。 </p><p>※私の環境では、Tomcatのエラーメッセージが表示されています。今は関係ありません。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3qQnvFxJw_FEGEsmkjmEjCohceu55shmzHzczPN-hXS3m2QZsb5v13id6kadlrdvrsbXb0OKzkgk7yvvPQpvH_vsfkYRGdEbS4EnAQvUzifyz8rSe3sji_vvkriv72kN_wS7Lb9wyVi7tYjxeb0jGfxzkcy6Rur-rQnx5096h1RBD-crG0IcI3CyeYg/s827/xampp.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="539" data-original-width="827" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3qQnvFxJw_FEGEsmkjmEjCohceu55shmzHzczPN-hXS3m2QZsb5v13id6kadlrdvrsbXb0OKzkgk7yvvPQpvH_vsfkYRGdEbS4EnAQvUzifyz8rSe3sji_vvkriv72kN_wS7Lb9wyVi7tYjxeb0jGfxzkcy6Rur-rQnx5096h1RBD-crG0IcI3CyeYg/w470-h307/xampp.png" width="470" /></a></div><p></p><p><br /></p><p>これで、XAMPPのインストールは終了です!</p><p><br /></p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">プログラムを動かしてみましょう!</span></h4><div><br /></div><p>XAMPPをインストールしたC:\xamppを開きます。 </p><p>その中に「htdocs」というフォルダがあります。 </p><p>このフォルダを「公開フォルダ」というそうです。 </p><p><br /></p><p>たとえば、この公開フォルダ直下に「test.php」というファイルを置くと、 </p><p>「http://[host]/test.php」でアクセスできます。</p><p>公開フォルダ直下に置かれたフォルダは、ドキュメントルートとなります。</p><p><br /></p><p>それでは、公開フォルダに「Test」というフォルダを作成し、 </p><p>Testフォルダで新しいファイル「hello.php」を作成しましょう!</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6RADu4UyWjd4Dv0mr2PeiiEqPAn1jcU-qb4sRmAZZdBVJRCnbQSTqEfM5qnKddJU8lbNB7MXDp0Avm02cxPuK2QPJyOPnKHl5sOongQc9GY9G3pvkczNIAfx36WDFQ-_jWmVJlMGgl2SDQhyxIbHG9y8VAr27pVBDRadbs07e6NTUpkxNHzdbd-3WJw/s666/hellophp.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="408" data-original-width="666" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6RADu4UyWjd4Dv0mr2PeiiEqPAn1jcU-qb4sRmAZZdBVJRCnbQSTqEfM5qnKddJU8lbNB7MXDp0Avm02cxPuK2QPJyOPnKHl5sOongQc9GY9G3pvkczNIAfx36WDFQ-_jWmVJlMGgl2SDQhyxIbHG9y8VAr27pVBDRadbs07e6NTUpkxNHzdbd-3WJw/w467-h286/hellophp.png" width="467" /></a></div><p></p><p><br /></p><p>「hello!」というメッセージを表示するだけの簡単なプログラムです。</p><p>(ちなみに、エディタでPHPの入力補助機能を入れていると、</p><p>最後の「?>」は不要とされます。</p><p>今回はあっても問題ありません。) </p><p><br /></p><p>ここで、再びXAMPP Control Panelに戻ります。</p><p>ApacheのStartボタンをクリックします。</p><p>(押したあと↓)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5eJ1GT1Q9Bd5MXcjiQAtI9CfFLE0gpj6MqrmFegSh-EOORP5hRVOjAV12-X59HAVPn49-b-2Qvj2-ygqOxEGA-ZhAxqF7T4A0ZMycNwVDsaHdxEd3zgWFEXUP_WWZqoIU_TcGI0Za-ucLAwmNSIOqv3Wr6xoRcYJJ13RmI0TbEMGA_pQWjMjDKTpyPg/s828/apachestart.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="540" data-original-width="828" height="347" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5eJ1GT1Q9Bd5MXcjiQAtI9CfFLE0gpj6MqrmFegSh-EOORP5hRVOjAV12-X59HAVPn49-b-2Qvj2-ygqOxEGA-ZhAxqF7T4A0ZMycNwVDsaHdxEd3zgWFEXUP_WWZqoIU_TcGI0Za-ucLAwmNSIOqv3Wr6xoRcYJJ13RmI0TbEMGA_pQWjMjDKTpyPg/w532-h347/apachestart.png" width="532" /></a></div><p></p><p><br /></p><p>次にブラウザを開き、「http://localhost/Test/hello.php」にアクセスします。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVk57lrC2wq7Iy8hRFTAkEwJzlyq6BBEdpBeye1jV6X1qjBQcgbQ8jHIRlz9Jk7nGPdebSP6o9fDRZENqkcwik3fualOskRksmEzXFCgny02rYGr0uCEtjpdkM9vKWHwxk4_ZQp_YcRLId6mqlNttPQLB6PLegWYYQ81EmGUk9kFi3mx5qthBZGyQw7w/s849/hellochrome.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="750" data-original-width="849" height="436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVk57lrC2wq7Iy8hRFTAkEwJzlyq6BBEdpBeye1jV6X1qjBQcgbQ8jHIRlz9Jk7nGPdebSP6o9fDRZENqkcwik3fualOskRksmEzXFCgny02rYGr0uCEtjpdkM9vKWHwxk4_ZQp_YcRLId6mqlNttPQLB6PLegWYYQ81EmGUk9kFi3mx5qthBZGyQw7w/w493-h436/hellochrome.png" width="493" /></a></div><p></p><p>期待通りの結果が得られました!</p><p><br /></p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">IISで動かしてみます。</span></h4><div><br /></div><p>IISを有効にする手順は、ここでは省略します。</p><p>CGIにもチェックすること、再起動することがポイントです。</p><p><br /></p><p>IISマネージャを開き、ハンドラーマッピングのアイコンをダブルクリックして</p><p>モジュールを追加します。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXIyAtxFy821i-LBZfk3ayi8AdFBP7GypQtIhtACshZ2yzTsPH_RntONoS4m4PdOqefeGRsxU5IT4BIjDvDwkfxEHnj6XA3OMikGg59eZ8UO1YDIPckJEQJdATu5hWUxp5ed5i_QjMmedEUnloejTQHNA8bZw2bm0Fsa2BBbHvR6Wo2t0S-VuJN8iZw/s1245/%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%20(273).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="1245" height="351" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXIyAtxFy821i-LBZfk3ayi8AdFBP7GypQtIhtACshZ2yzTsPH_RntONoS4m4PdOqefeGRsxU5IT4BIjDvDwkfxEHnj6XA3OMikGg59eZ8UO1YDIPckJEQJdATu5hWUxp5ed5i_QjMmedEUnloejTQHNA8bZw2bm0Fsa2BBbHvR6Wo2t0S-VuJN8iZw/w488-h351/%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%20(273).png" width="488" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5pOEHZpiXhDv9GVw4WWZn0CjqKCttPbdgSjY5Xp9nFxflgbLN0-O8QQPCptyYVS21Vdr6NVDZ-iyKaiPxyT3u2DaanFJ0xXJLgA9Puz4EC7_RMP9AKwqJrSpjzSD-qvQu7Y1QHT_wFyw5ZmRUsFXLkieYP57Ii0egCjauBtUclwtDGxlGaneY8m3_Kg/s1243/%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%20(274).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="895" data-original-width="1243" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5pOEHZpiXhDv9GVw4WWZn0CjqKCttPbdgSjY5Xp9nFxflgbLN0-O8QQPCptyYVS21Vdr6NVDZ-iyKaiPxyT3u2DaanFJ0xXJLgA9Puz4EC7_RMP9AKwqJrSpjzSD-qvQu7Y1QHT_wFyw5ZmRUsFXLkieYP57Ii0egCjauBtUclwtDGxlGaneY8m3_Kg/w486-h350/%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%20(274).png" width="486" /></a></div><div><br /></div>以下のように設定します。<div>・要求パス</div><div> *.php</div><div>・モジュール</div><div> FastCgiModule</div><div>・実行可能ファイル</div><div> C:\xampp\php\php-cgi.exe</div><div>・名前</div><div> 任意で指定<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_dkcuiZ6w_1gjr2c4I-DPTecInlD8ROsN59jHqa64EMCRFLh1O-44eEolM-XKAjl37CLaRXvB3wSTbjAY2Mfl-oo8k5SS2aF-NR5SzN0zQ0Vt8XSJEicJAis3CEWVZfITus3wRO9dAtIJaDRnhOtVhEVrRpOoGDtpn584H3qaUaI1nx9K5wnpRoJojw/s1247/%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%20(275).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="898" data-original-width="1247" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_dkcuiZ6w_1gjr2c4I-DPTecInlD8ROsN59jHqa64EMCRFLh1O-44eEolM-XKAjl37CLaRXvB3wSTbjAY2Mfl-oo8k5SS2aF-NR5SzN0zQ0Vt8XSJEicJAis3CEWVZfITus3wRO9dAtIJaDRnhOtVhEVrRpOoGDtpn584H3qaUaI1nx9K5wnpRoJojw/w518-h372/%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%20(275).png" width="518" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">メッセージが表示されるので、「OK」をクリックします。</div><div class="separator" style="clear: both; text-align: left;">こういう設定がいらないところが、XAMPPの楽なところなんですね。</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqw7Q_wSWlSChCmoo1ciUIcKqGyFOvSWUWeBinjYpdMg_-p5OShJI53euKCU-mZluCelBzhcIqNttamR8kFyZE_N1e4HigggPmSz5L5_bS2aUW-hVQGN2VL-zP0-AFeEL7to5WZetzB3nhJGPgNphT2vfmJ7tJXMvetsuNICTz1THBOW28UaPzRjQ-Gg/s1248/%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%20(276).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="898" data-original-width="1248" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqw7Q_wSWlSChCmoo1ciUIcKqGyFOvSWUWeBinjYpdMg_-p5OShJI53euKCU-mZluCelBzhcIqNttamR8kFyZE_N1e4HigggPmSz5L5_bS2aUW-hVQGN2VL-zP0-AFeEL7to5WZetzB3nhJGPgNphT2vfmJ7tJXMvetsuNICTz1THBOW28UaPzRjQ-Gg/w507-h365/%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%20(276).png" width="507" /></a></div><p><br /></p><p>C:\inetpub\wwwroot直下に先ほどのhello.phpを置いて</p><p>「http://[host]/hello.php」にアクセスすると、</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiORjybOwQld1lZQLlsSsjcWAS9iR8FU1ZNhhgv4h1t9qlk2fr0X43P_4Ct7WtsPRBwgXvgeaPIlwFxS5h3EsKwiwnepBPdq7nB-R-NbG1POWslhCFLhVbjEKg3NkbJ4B17SPg_E3CHLZgJLF2PMdgX5T40Qz25ovb7QYhdFbcnJIHhgu2wTUGereRkOA/s850/%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%20(277).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="659" data-original-width="850" height="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiORjybOwQld1lZQLlsSsjcWAS9iR8FU1ZNhhgv4h1t9qlk2fr0X43P_4Ct7WtsPRBwgXvgeaPIlwFxS5h3EsKwiwnepBPdq7nB-R-NbG1POWslhCFLhVbjEKg3NkbJ4B17SPg_E3CHLZgJLF2PMdgX5T40Qz25ovb7QYhdFbcnJIHhgu2wTUGereRkOA/w506-h392/%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%20(277).png" width="506" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>Apacheサーバー上では見つからないというエラーが発生しています。<div><br /><p>XAMPPでApacheを無効にすれば、正常に動きそうなものですが、</p><p>再起動しないとずっとこんな感じです。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSIV657_3_tP3Vy3C6IrWfWaGvQE8Ai50OmMOffMYxm98Pi4BOdQpkJkhgIFxu5YMRX32f32hmQ7jbUlIUv1CFrjTIg-NMwDhOWsXsqtBMzGbW33mIllo1nTLhNg2eNUhBFq0AoDvktnIysv5d5Y0kzuStdQAaIUGGH6OMlD35QbWXjHARDuoJiPUbKA/s1014/lhcantconnect.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="848" data-original-width="1014" height="397" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSIV657_3_tP3Vy3C6IrWfWaGvQE8Ai50OmMOffMYxm98Pi4BOdQpkJkhgIFxu5YMRX32f32hmQ7jbUlIUv1CFrjTIg-NMwDhOWsXsqtBMzGbW33mIllo1nTLhNg2eNUhBFq0AoDvktnIysv5d5Y0kzuStdQAaIUGGH6OMlD35QbWXjHARDuoJiPUbKA/w474-h397/lhcantconnect.png" width="474" /></a></div><br /><p></p><p>IISを有効にしてからApacheを起動すると、エラーになります。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHrNY-0fXT6yzKsdqT7VogrUFfU_t7l_lw-wsCJbacDozWN8eLn7teDTBeLPLXIAF-QBsIjzyLMCqu3Datt0zIc8DkxLqGi-AXXbW9pSIP27A0Zid7C3rKWdxv62suWEiLV6W-W5psWYX9YBa7WlgXfg531Q45PaX1kPVbOWsU8DiPJqRKTOR553ikug/s830/apachecantconnect.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="830" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHrNY-0fXT6yzKsdqT7VogrUFfU_t7l_lw-wsCJbacDozWN8eLn7teDTBeLPLXIAF-QBsIjzyLMCqu3Datt0zIc8DkxLqGi-AXXbW9pSIP27A0Zid7C3rKWdxv62suWEiLV6W-W5psWYX9YBa7WlgXfg531Q45PaX1kPVbOWsU8DiPJqRKTOR553ikug/w464-h302/apachecantconnect.png" width="464" /></a></div><br /><p>どちらにせよ、問題は両方がデフォルトのポート80を使おうとしていることです。</p><p>どちらかのみを起動しておくにしても、再起動なんて面倒なことはやってられません。</p><p>というわけで、どちらかのポート番号を変更します。</p><p>どっちを変えてもいいんですが、今回はApacheの方を変更してみましょう。</p><p><br /></p><p><a href="https://itsakura.com/xampp-port#:~:text=%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B-,%EF%BC%91%EF%BC%8EApache%E3%81%AEConfig%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%80%81Apache(,%E4%BB%A5%E5%A4%96%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%BE%E3%81%99%E3%80%82&text=example.com%3A1443-,%E4%BF%AE%E6%AD%A3%E5%AE%8C%E4%BA%86%E5%BE%8C%E3%81%AFXAMPP%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%91%E3%83%8D%E3%83%AB%E3%81%AB%E3%81%82%E3%82%8Bapache,%E6%8A%BC%E3%81%97%E3%81%A6%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%80%82">こちらのサイト</a>を参考にしました。<br /></p><p><br /></p><p>ApacheのConfigボタンをクリックしてhttpd.configを開きます。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQpADT6JYWyUapSSvoWem9z5jxnJ4ZLjtotKREQgxp6f06MSlq_kIoOjy__QXNfY76INa4KqvxCuRUTBLGq8j0X1Y4ytNkPh7e9tC9sjqsnzzb34_acF3rE5SqqsUehV7gUVNXxHJWycbTMEGIAWPDWA6woqCr6oQtVrDhtmVbTka03jhlI70nibhOkg/s884/%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%20(279).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="537" data-original-width="884" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQpADT6JYWyUapSSvoWem9z5jxnJ4ZLjtotKREQgxp6f06MSlq_kIoOjy__QXNfY76INa4KqvxCuRUTBLGq8j0X1Y4ytNkPh7e9tC9sjqsnzzb34_acF3rE5SqqsUehV7gUVNXxHJWycbTMEGIAWPDWA6woqCr6oQtVrDhtmVbTka03jhlI70nibhOkg/w531-h322/%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%20(279).png" width="531" /></a></div><div><br /></div>Listen 80と書いてあるところがあるので、任意の数値に書き換えます。</div><div>今回は3330としました。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF_OI6ph88avowwgBrzxyJMMfRTUixeic7J0HANe592GwVs5aHhMCV2OdUq0r1AwB_vYYm5L3zVNwvHrxpxfZqBd2dDix3CTX9Xfspno8cMMX0LD5szWz_JQ8m0x_gg_sdiBejF0e_iOVIdtR4zwXo3JjGeH1lB0kMZElV8i9FsCQ_N8tbC5oFYpXyLA/s951/%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%20(280).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="683" data-original-width="951" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF_OI6ph88avowwgBrzxyJMMfRTUixeic7J0HANe592GwVs5aHhMCV2OdUq0r1AwB_vYYm5L3zVNwvHrxpxfZqBd2dDix3CTX9Xfspno8cMMX0LD5szWz_JQ8m0x_gg_sdiBejF0e_iOVIdtR4zwXo3JjGeH1lB0kMZElV8i9FsCQ_N8tbC5oFYpXyLA/w529-h380/%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%20(280).png" width="529" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: left;">同じファイルでServerName 80となっているところも同じ値に書き換えます。</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsUFuRvI9O-PsLHd6_5s30pg1DqN-1h8eP54msRGzRZNkMrzjRKUAPeaw51rpE9mCAL8Sf0qJ3cq-haVctxUMLb5WIjpG69L5NyofUhZnTKK4mNE7v8syE4yYAb0e-peoDkyt6KDUoMWBbDjl3nGBQ4n4WEbvprtn5w5oZyEAc8DBNpmKHUItDNv6mPw/s947/%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%20(281).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="677" data-original-width="947" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsUFuRvI9O-PsLHd6_5s30pg1DqN-1h8eP54msRGzRZNkMrzjRKUAPeaw51rpE9mCAL8Sf0qJ3cq-haVctxUMLb5WIjpG69L5NyofUhZnTKK4mNE7v8syE4yYAb0e-peoDkyt6KDUoMWBbDjl3nGBQ4n4WEbvprtn5w5oZyEAc8DBNpmKHUItDNv6mPw/w542-h387/%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%20(281).png" width="542" /></a></div><div><br /></div><div><br /></div>次にhttpd-ssl.configを開き、</div><div><br /></div><div>同様に「Listen 443」と「ServerName ~ 443」となっているところを</div><div>別の数値に変えます。</div><div><br /></div><div>この上で「http://localhost:3330/Test/hello.php」にアクセスすると、</div><div>期待通りメッセージが表示されました!<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9i-pBxzQTCdJTY-MIfEhRk60_WBV3nLFYGwkJASmDH6Ns7_dz8JYO749Rzn5gp9ANGt_HC3K1V_El9pknZWqd6qgY_W-9Pv7FN8jAI2GuqYvoeG-MBvxCV068zOdk0fVWbQYEVTnLXdOrrtDSKUqV9fuNZlQh0qDMxMwdYBbx4Lf9Vd7Hd3jAvVT22Q/s845/%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%20(282).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="845" height="393" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9i-pBxzQTCdJTY-MIfEhRk60_WBV3nLFYGwkJASmDH6Ns7_dz8JYO749Rzn5gp9ANGt_HC3K1V_El9pknZWqd6qgY_W-9Pv7FN8jAI2GuqYvoeG-MBvxCV068zOdk0fVWbQYEVTnLXdOrrtDSKUqV9fuNZlQh0qDMxMwdYBbx4Lf9Vd7Hd3jAvVT22Q/w537-h393/%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%20(282).png" width="537" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">もちろん、IISの方もOKです!(まぎらわしいのでメッセージの内容変えました。)</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfwKRxRdZQapK1yA2--zJ5QHy7mGTDkcrmmv3t9VU1mVgwnXba_PXyKaaVn0XLomWhbjDeSlU-Dz0sPwNLXiFRTi_2rXB0TNpDM5wsWMQCIUepMJUbMg_IFCs82b0dniLXudRvFtuhZdvqy0jqzpmwxY1Gce7GQJKzrr4dBC6llg2qGIzebipIqJBHw/s844/%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%20(278).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="622" data-original-width="844" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKfwKRxRdZQapK1yA2--zJ5QHy7mGTDkcrmmv3t9VU1mVgwnXba_PXyKaaVn0XLomWhbjDeSlU-Dz0sPwNLXiFRTi_2rXB0TNpDM5wsWMQCIUepMJUbMg_IFCs82b0dniLXudRvFtuhZdvqy0jqzpmwxY1Gce7GQJKzrr4dBC6llg2qGIzebipIqJBHw/w524-h387/%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%20(278).png" width="524" /></a></div><p><br /></p></div></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">終わりに</span></h4><div><br /></div><div>ここまで、phpの環境構築についてXAMPPを使用しながら確認しました。</div><div><br /></div><div>phpの公式マスコットはelePHPantという名のゾウですが、</div><div>PostgreSQLやEvernoteのマスコットもゾウです。</div><div>人気なんですね(ちょっとややこしいけど)。</div><div><br /></div><div>ご覧いただいてありがとうございました。</div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-70859900464653169342023-05-28T17:34:00.003+09:002023-05-28T17:34:23.389+09:00PowerShellでプチプログラミング<p>こんにちは、やっまむーです。</p><p>仕事での出来事ですが、常駐先の現場ではセキュリティの関係でPCにソフトを勝手にインストールする事は禁止されています。<br />当然、業務で使わないのであればVisualStudio等もインストールできず、専用のマシンを別途使わなければなりません。</p><p>そんな中、内製の暗号化ライブラリで共通鍵が期待値と異なる問題が発生しました。<br />ソースコードはあれど、デバッグをする事は出来ません。<br />何故期待値と異なるのか、暗号化クラスの使い方に問題はないかと調べる際に、実際に動作させられないことが非常に不便でした。</p><p>そんな時、PowerShellを使って簡単にですが暗号化クラスの動作確認ができたのでその方法を紹介します。</p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">PowerShellでクラスを生成する</span></span></h4><p style="text-align: left;">問題があるとされていたのは、<a href="https://learn.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.ecdiffiehellmancng?view=net-7.0">ECDiffieHellmanCng クラス</a>でした。<br />このクラスのオブジェクトをPowerShell上で生成します。(上記ページの例を参考)<br /></p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhr5eDPkzlgd8ExSP5GIb3DsFF8fbqNe1jDzGYvBRkwGB_C85Boir2UQCBG_yNO1G8g3b2NLuNV7qE_znzqsr_IQZ_0t7MUW2klnvEsG3B_xYuE0j2E2JWkhYUhRdYIQfwczOhFq9PWxaa-ZV6MQcRCc4W9tNLb1OLCEO946Oxergg1FoEeGjBbQDPT" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="495" data-original-width="871" height="365" src="https://blogger.googleusercontent.com/img/a/AVvXsEhr5eDPkzlgd8ExSP5GIb3DsFF8fbqNe1jDzGYvBRkwGB_C85Boir2UQCBG_yNO1G8g3b2NLuNV7qE_znzqsr_IQZ_0t7MUW2klnvEsG3B_xYuE0j2E2JWkhYUhRdYIQfwczOhFq9PWxaa-ZV6MQcRCc4W9tNLb1OLCEO946Oxergg1FoEeGjBbQDPT=w640-h365" width="640" /></a></div><p></p><p style="text-align: left;">このようにPowerShell上で任意のクラスのオブジェクトを生成することができます。<br />また、PublicKeyの取得もできます。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgLiJHvI4hAR3nzj_FuvXwXbX6mxzUwy4_Uy95b7pdrAHVNK3_D0D74dLlDhdwoIhF3n09xRXFfBGIdU17vY5HPsJQWjJVygUB8c2ZsOF5s6mCqPeRhp3IL9MXvuWRTogckrS8CvtU1sOi4Poks7SCiUG2XXTg_BoeBdCLon2QjDyQ1EXOR7wVWcGvp" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="495" data-original-width="871" height="364" src="https://blogger.googleusercontent.com/img/a/AVvXsEgLiJHvI4hAR3nzj_FuvXwXbX6mxzUwy4_Uy95b7pdrAHVNK3_D0D74dLlDhdwoIhF3n09xRXFfBGIdU17vY5HPsJQWjJVygUB8c2ZsOF5s6mCqPeRhp3IL9MXvuWRTogckrS8CvtU1sOi4Poks7SCiUG2XXTg_BoeBdCLon2QjDyQ1EXOR7wVWcGvp=w640-h364" width="640" /></a></div><p></p><p style="text-align: left;">同様の手順でBobのPublicKeyを生成してCngKeyオブジェクトの生成まで行います。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjbbZZuPuoFDgKzQlf9tuSQ3-mGHtMVqMP5fC8vW4dDtV93brquFInaJWlyd2HUSg1GT5D4KaHfwylXJP1n1WiINcZn15abawG7Wne7D48zbOBmG-8J3nNdspB6o-F5osbbNfmZxHkwa85K87xujZquimrXcgfSHTA8A03iiqVnALNBwGUQOn2ZLM30" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="495" data-original-width="871" height="364" src="https://blogger.googleusercontent.com/img/a/AVvXsEjbbZZuPuoFDgKzQlf9tuSQ3-mGHtMVqMP5fC8vW4dDtV93brquFInaJWlyd2HUSg1GT5D4KaHfwylXJP1n1WiINcZn15abawG7Wne7D48zbOBmG-8J3nNdspB6o-F5osbbNfmZxHkwa85K87xujZquimrXcgfSHTA8A03iiqVnALNBwGUQOn2ZLM30=w640-h364" width="640" /></a></div><p></p><p style="text-align: left;">作成されたCngKeyを使い、鍵の生成を行います。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh0HZKXWBvEIB2bpk-ZrHJL-XajY_tYx1MOLrvFvo7Vjk9WYYoXnAJqgkaonGK4HahrIyc7DsASsHsyXgZmC9tErig_7Md2GfKGatWl-7C5UAHigkdnjRA9_DMkKO4v1AkP_9aZPnOPz0XOVhZkEFeRC8fR2PZmRTxpGAsUX_AkD78sPlD6Ep94iiAs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="495" data-original-width="871" height="364" src="https://blogger.googleusercontent.com/img/a/AVvXsEh0HZKXWBvEIB2bpk-ZrHJL-XajY_tYx1MOLrvFvo7Vjk9WYYoXnAJqgkaonGK4HahrIyc7DsASsHsyXgZmC9tErig_7Md2GfKGatWl-7C5UAHigkdnjRA9_DMkKO4v1AkP_9aZPnOPz0XOVhZkEFeRC8fR2PZmRTxpGAsUX_AkD78sPlD6Ep94iiAs=w640-h364" width="640" /></a></div><p></p><p style="text-align: left;">このような手順で、ソースコードの内容をPowerShell上で再現して鍵計算の間違いを調べることができました。</p><p style="text-align: left;">複雑なコードを再現することは難しいですが、簡単な確認程度であればPowerShellでも十分に可能です。<br />もし、同じようにデバッグ環境が用意できない場合があれば、一度試してみてはいかがでしょうか。</p><p style="text-align: left;">ではではー。</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-67953258668028406152023-05-19T16:00:00.002+09:002023-05-19T16:00:00.154+09:00YouTube & Article Summary powered by ChatGPTを使ってみた!<div style="text-align: left;">ChatGPTを使い、YouTube動画の要約を作成してくれるChrome拡張機能「YouTube & Article Summary powered by ChatGPT」を使ってみました。<br /><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">インストール&設定</span></h4><div><br /></div></div></div><div style="text-align: left;">YouTube & Article Summary powered by ChatGPTは「chrome ウェブストア」にあります。</div><div style="text-align: left;"><br /></div><div style="text-align: left;">・<a href="https://chrome.google.com/webstore/detail/youtube-article-summary-p/nmmicjeknamkfloonkhhcjmomieiodli">YouTube & Article Summary powered by ChatGPT</a></div><div style="text-align: left;"><br /></div><div style="text-align: left;">「Chromeに追加」すると、YouTubeの動画再生画面の右上にツールが表示されます。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkI1EHYQfCMEPafAcXScLSBUUObg0wzaOFtgcyj2_6ZHmWgx1XR3GCxaQHg5zN1uS9amEW_TV2yec9jg10MidBrgxpoBRsrzVdYknvEGV_HDD9yOoMBO_a77NLJuhUTjSG5QIyEmsIiS4yTmUfQumnD3r39NV8kXN4U07o53Egxwby_YZyM60N6m-V/s523/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="401" data-original-width="523" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkI1EHYQfCMEPafAcXScLSBUUObg0wzaOFtgcyj2_6ZHmWgx1XR3GCxaQHg5zN1uS9amEW_TV2yec9jg10MidBrgxpoBRsrzVdYknvEGV_HDD9yOoMBO_a77NLJuhUTjSG5QIyEmsIiS4yTmUfQumnD3r39NV8kXN4U07o53Egxwby_YZyM60N6m-V/s320/001.png" width="320" /></a></div><br /><div style="text-align: left;">言語設定を日本語に設定し、ChatGPTアイコンを押すと、ChatGPTの画面が開き、動画の要約が表示されます。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">使ってみる</span></h4><div><br /></div><div>当社のYouTubeチャンネルで公開している動画で試してみましょう。</div><div><br /></div><div>当社のチャンネルで公開している動画には、英語字幕を付けているものと付けていないものがあります。まずは、英語字幕を付けていない動画です。</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="270" src="https://www.youtube.com/embed/2RmRnmvO-hw" width="480" youtube-src-id="2RmRnmvO-hw"></iframe></div><div><br /></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQsBYQIai5XPw_6BkRevE38rTY8BC0ZqZwaTsHYr-tHlbYdCH1sIzalVgzJwDeCwDZ6fkdUpsFxG4hqqhgKrMn_-zSFBexszwEpf8uAHJpM9wE2Z4eabxEAi4rtWojH_0BbhN2PyEeuDLpBotpeyeq6MDd58cK9oe-Qz7nSLR_A3JXIk_tof06ZIIS/s817/004.png"><img border="0" data-original-height="608" data-original-width="817" height="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQsBYQIai5XPw_6BkRevE38rTY8BC0ZqZwaTsHYr-tHlbYdCH1sIzalVgzJwDeCwDZ6fkdUpsFxG4hqqhgKrMn_-zSFBexszwEpf8uAHJpM9wE2Z4eabxEAi4rtWojH_0BbhN2PyEeuDLpBotpeyeq6MDd58cK9oe-Qz7nSLR_A3JXIk_tof06ZIIS/w640-h476/004.png" width="640" /></a></div><br /><div>自動翻訳の日本語字幕をもとに要約しています。語句がおかしいのは元の翻訳のせいで、要約自体はきちんとできていますね。</div><div><br /></div></div><div>次に、英語字幕を付けている動画で試してみましょう。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="270" src="https://www.youtube.com/embed/6-noDky6-VI" width="480" youtube-src-id="6-noDky6-VI"></iframe></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjzu6yflKQlYCt67N7r4H_zL_ssvM5q27k9BnV7GIDh6_qGaOPVPt60Nffn7ruzl4lg09qkDORg8Aib8OyLCe2qnI3sa28I3ja8EAYDl5B0RODBGcHx_iD3URjtZRUHiDDlPMZtCUtHDkxZLQ17KmqOJvBa5OOQv6FBZXpkB9pjyhgiMI4hqH6vD8I/s838/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="747" data-original-width="838" height="571" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjzu6yflKQlYCt67N7r4H_zL_ssvM5q27k9BnV7GIDh6_qGaOPVPt60Nffn7ruzl4lg09qkDORg8Aib8OyLCe2qnI3sa28I3ja8EAYDl5B0RODBGcHx_iD3URjtZRUHiDDlPMZtCUtHDkxZLQ17KmqOJvBa5OOQv6FBZXpkB9pjyhgiMI4hqH6vD8I/w640-h571/002.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">完璧ですね!</div><div class="separator" style="clear: both;">ところが、もう一度、試したところ、下記の要約が出力されました。</div><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5H3IKlShBCG7NaySjqUo07e_t2aCAmDdFB584QGFnHnRxXjgCK3UOoPNITV2MpQzSrgyuT1im9rU_Z8Yv6SJmc0GIPWmoqYo_eBImZxhabXESJCBNNBlh8J-Q64f2Zwqd0q8bC5yr4137TtUkf42WlcjZysIzyGK_e6-278tIU0BzsRRXECqUoR27/s826/003.png"><img border="0" data-original-height="711" data-original-width="826" height="550" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5H3IKlShBCG7NaySjqUo07e_t2aCAmDdFB584QGFnHnRxXjgCK3UOoPNITV2MpQzSrgyuT1im9rU_Z8Yv6SJmc0GIPWmoqYo_eBImZxhabXESJCBNNBlh8J-Q64f2Zwqd0q8bC5yr4137TtUkf42WlcjZysIzyGK_e6-278tIU0BzsRRXECqUoR27/w640-h550/003.png" width="640" /></a></div><br /><div>先ほどは</div><div style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;">列車は近鉄大阪線の終点である伊勢中川駅には停まらず、連絡線を通過して近鉄名古屋線に合流し、名古屋に到着します。プレミアムシートは非常に快適で、筆者はまた乗りたいと思っています。</div><div><br /></div><div>と、「伊勢中川駅が大阪線の終点であること」「伊勢中川駅には入らず、中川短絡線を通って名古屋線に合流すること」をきちんと訳せていたのに、</div><div style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;">「ひのとり」は伊勢中川駅で終点となり、名古屋へ向かう途中で近鉄名古屋線に合流する。約2時間以上かけて名古屋駅に到着し、プレミアム席は非常に快適である。</div><div><br /></div><div>と、「ひのとりの終点が伊勢中川駅」と誤訳していますね。</div><div>何度か試しましたが、正しく訳せる、訳せないは半々くらいでした。</div><div><br /></div><div><br /></div><div>またいつか、どこかで。</div></div></div></div>つじhttp://www.blogger.com/profile/12845659453896114379noreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-3076049055112268772023-05-14T16:21:00.000+09:002023-05-14T16:21:52.110+09:00GAS(Google Apps Script)でGmailのメール削除<p>こんにちは。ざわです。</p><p>Gmailを使っているのですが、未読件数がどんどん溜まっていってます。。</p><p>手動で削除してもいいのですが、GAS(Google Apps Script)を使ってGmailのメールを一括削除してみることにしました。</p><p>手順は以下の通り。</p><p>① GASプロジェクト作成</p><p></p><p style="text-align: left;"> GASのプロジェクト作成方法については、以前書いた<a href="https://aimek-developer.blogspot.com/2023/01/gasgoogle-apps-scriptyoutube.html" target="_blank">こちらのブログ</a>を参照ください。</p><p style="text-align: left;">② メール削除のスクリプトを実行</p><div style="text-align: left;"><div> ◆ メール削除スクリプト(全体)</div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div><span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">cnt</span> <span style="color: #859900;">=</span> <span style="color: #d33682;">0</span>;</div><br /><div><span style="color: #586e75; font-weight: bold;">function</span> <span style="color: #268bd2;">myFunction</span>() {</div><br /><div> <span style="color: #93a1a1; font-style: italic;">// 削除するメールの条件:スター付きでない かつ 過去1年前より古い日付のもの</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">query</span> <span style="color: #859900;">=</span> <span style="color: #2aa198;">'-is:starred older_than:1y'</span>;</div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">threads</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">GmailApp</span>.<span style="color: #268bd2;">search</span>(<span style="color: #268bd2;">query</span>, <span style="color: #d33682;">0</span>, <span style="color: #d33682;">100</span>);</div><br /><div> <span style="color: #268bd2;">Logger</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'取得スレッド数: '</span> <span style="color: #859900;">+</span> <span style="color: #268bd2;">threads</span>.length <span style="color: #859900;">+</span> <span style="color: #2aa198;">'件'</span>);</div><div> </div><div> <span style="color: #859900;">if</span>(<span style="color: #268bd2;">threads</span>.length <span style="color: #859900;">></span> <span style="color: #d33682;">0</span>){ </div><div> <span style="color: #268bd2;">cnt</span><span style="color: #859900;">++</span>;</div><div> <span style="color: #268bd2;">Logger</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'処理回数: '</span> <span style="color: #859900;">+</span> <span style="color: #268bd2;">cnt</span> <span style="color: #859900;">+</span> <span style="color: #2aa198;">'回目'</span>);</div><br /><div> <span style="color: #93a1a1; font-style: italic;">// スレッドをゴミ箱に移動</span></div><div> <span style="color: #268bd2;">GmailApp</span>.<span style="color: #268bd2;">moveThreadsToTrash</span>(<span style="color: #268bd2;">threads</span>);</div><br /><div> <span style="color: #93a1a1; font-style: italic;">// 再帰呼び出し</span></div><div> <span style="color: #268bd2;">myFunction</span>();</div><div> }</div><div> </div><div>}</div></div></blockquote><div style="text-align: left;"><br /></div><p> ◆ スクリプトの説明:</p></div><div style="text-align: left;"> ・削除対象とするメールの条件を指定</div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">スター付きのメールと 過去1年分のメールは削除せずに残そうと思うので、</div></blockquote><div style="text-align: left;"></div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">「スター付きでない かつ 過去1年前より古い日付のもの」を削除条件として設定します。</div></blockquote><div style="text-align: left;"></div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><span style="background-color: #fdf6e3; color: #586e75; font-family: Consolas, "Courier New", monospace; font-size: 14px; font-weight: bold; white-space: pre;">const</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">query</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #859900; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">=</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #2aa198; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">'-is:starred older_than:1y'</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">;</span></div></blockquote></blockquote><div style="text-align: left;"> </div><div style="text-align: left;"> ・対象メールの抽出</div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">Gmailアプリクラスの searchメソッドで、削除対象メールのスレッドを抽出します。</div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">引数には上記の条件と抽出結果で返却されるスレッド数の最大値(ここでは100スレッド)を指定。</div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">(最大値の引数は省略可能で、指定なしの場合は 500 になります)</div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><span style="background-color: #fdf6e3; color: #586e75; font-family: Consolas, "Courier New", monospace; font-size: 14px; font-weight: bold; white-space: pre;">const</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">threads</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #859900; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">=</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;"> </span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">GmailApp</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">.</span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">search</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">(</span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">query</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">, </span><span style="background-color: #fdf6e3; color: #d33682; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">0</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">, </span><span style="background-color: #fdf6e3; color: #d33682; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">100</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">);</span></div></blockquote></blockquote><div style="text-align: left;"><br /></div><div style="text-align: left;"> ・ 抽出したスレッドをゴミ箱に移動</div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">GmailApp</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">.</span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">moveThreadsToTrash</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">(</span><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">threads</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">);</span></div></blockquote></blockquote><div style="text-align: left;"> </div><div style="text-align: left;"> ・再帰呼び出し </div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;">ここでは1回の削除件数を100スレッドにしているのですが、溜まっている件数はそれ以上なのでスクリプトを再帰呼び出しして、条件に該当するスレッド件数が0件になるまで繰り返し処理するようにしています。</div></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><span style="background-color: #fdf6e3; color: #93a1a1; font-family: Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; white-space: pre;">// 再帰呼び出し</span></blockquote></blockquote><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><span style="background-color: #fdf6e3; color: #268bd2; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">myFunction</span><span style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; white-space: pre;">();</span></blockquote></blockquote><div style="text-align: left;"> </div><div style="text-align: left;"><div>GASでは、1スクリプトの実行時間が6分間という制限があるそうで、</div><div>実行した結果、件数が多かったため 6分以上になると途中でタイムアウトエラーが発生してしまいましたが、</div><div>過去年数の条件を変えながら数回に分けて実行することで溜まりに溜まっていたメールを削除することができました。</div><p style="text-align: left;">今後、不要メールが溜まらないよう GASのトリガー機能を使って、この削除スクリプトを定期的に自動実行させたいと思います。</p></div><div style="text-align: left;"><div style="text-align: left;"> ・画面左の[トリガー]アイコンをクリックし、[トリガーを追加]ボタンをクリック。</div></div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY-mnm4dhs7XOHYKLftMxk3_b1MCgZcuQsYsrd02Op-qsMzHRgy76I9pDaDv0nE3vvpbcnmi8HdXp2_KQWpCL9loM7mNWfUCcN5dXaDkJgckKrxpEZ268AKl2Rl6pk172D7B22kz_mxXlrqENvWTPkdUPweB4MW9pYsgH2HsVONfO_OR_dHxafNBLKdg/s1267/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="559" data-original-width="1267" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY-mnm4dhs7XOHYKLftMxk3_b1MCgZcuQsYsrd02Op-qsMzHRgy76I9pDaDv0nE3vvpbcnmi8HdXp2_KQWpCL9loM7mNWfUCcN5dXaDkJgckKrxpEZ268AKl2Rl6pk172D7B22kz_mxXlrqENvWTPkdUPweB4MW9pYsgH2HsVONfO_OR_dHxafNBLKdg/w640-h282/02.png" width="640" /></a></div><br /></div></blockquote><div style="text-align: left;"><div style="text-align: left;"> ・イベントのソースに「時間手動型」を選択し、時間ベースのトリガータイプに任意のタイプを選択。</div></div><div style="text-align: left;"> (私は月1回実行するように設定)</div><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRIL_DMXRm-CPOrRueBc2XNsmN-E2A3Kdcc30CKjsNL_k9ZNrLK2yd5Hu6P8XXouIbsVkKHjYDjWGYNuJfkzuwqdjtWA3fXeG2X12OWPTRcroZVcvSEtVjjoC22lTcUlzEgg-glMHTeFSwCn6oluDhjEj4UHBfIAyMN3rEX75-VuCZlv-r8v5valVpyg/s927/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="927" data-original-width="725" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRIL_DMXRm-CPOrRueBc2XNsmN-E2A3Kdcc30CKjsNL_k9ZNrLK2yd5Hu6P8XXouIbsVkKHjYDjWGYNuJfkzuwqdjtWA3fXeG2X12OWPTRcroZVcvSEtVjjoC22lTcUlzEgg-glMHTeFSwCn6oluDhjEj4UHBfIAyMN3rEX75-VuCZlv-r8v5valVpyg/w501-h640/03.png" width="501" /></a></div><br /> それではまた!</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-19418318480149806062023-04-28T08:00:00.008+09:002023-04-28T08:00:00.145+09:00ChatGPTから見た、GPT-4の性能向上と今後の応用<style type="text/css">
.keyboard-key{background-color:#f9f9f9;background-image:-moz-linear-gradient(center top,#eee,#f9f9f9,#eee);border:1px solid #888;border-radius:2px;box-shadow:1px 2px 2px #ddd;font-family:inherit;font-size:.85em;padding:1px 3px}
table, td, th{ border: 1px solid black; }
</style>
<p> </p>
<p>どうも。ひっくです。</p>
<p><a href='https://aimek-developer.blogspot.com/2023/01/chatgpt.html'>前回記事</a>を作成した際、ChatGPTを触ってみた感想を書きました。</p>
<p>執筆当時、私は性能の向上にはまだ時間がかかると思っていました。</p>
<p>ところが2023年3月14日(米国時間)にOpenAIからGPT-4が発表され、</p>
<p>その後のSNS上での使用例などを見ると、認識を改めざるを得ないと考えるようになりました。</p>
<p>エンジニアだけでなく、今後多くの職業で生成系AIの活用が必須になると思います。</p>
<p>というわけで、今回もChatGPTについて取り上げます。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4F9J23PiL04RUGrkJiHyVbYo6IqhDa34X9Wm7KFKw7Sq6_nUbodLUTDDP0xlrjF6C1gzQdrmUsX5utkKTCJv4MgUGa4cQ5BHJLRNcdoAeNKGEISC6Yk6yKufBWmlpxiBIWsUOLkzj8kkv64sn2C5EI5mRJNoiIOwtW5QHgTvFrpBbg9Wvd3eetw7ztA/s1600/AI1.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4F9J23PiL04RUGrkJiHyVbYo6IqhDa34X9Wm7KFKw7Sq6_nUbodLUTDDP0xlrjF6C1gzQdrmUsX5utkKTCJv4MgUGa4cQ5BHJLRNcdoAeNKGEISC6Yk6yKufBWmlpxiBIWsUOLkzj8kkv64sn2C5EI5mRJNoiIOwtW5QHgTvFrpBbg9Wvd3eetw7ztA/s1600/AI1.jpg" width="600"></a></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">GPT-4とGPT-3.5の違い</span></h4><br>
<p>GPT3.5との大きな違いは以下の3点になるかと思われます。</p>
<ul>
<li><p>性能が向上し、専門的な問題も回答できるようになった</p>
<ul>
アメリカの司法試験で上位10%の成績を取得(GPT-3.5では下位10%)
</ul>
</li>
<li><p>長い文章の入出力が可能になった</p>
<ul>
最大32000トークン=日本語換算約30000文字(GPT-3.5では4096トークン=日本語換算約3700文字)
</ul>
</li>
<li><p>画像入力が可能になった</p>
<ul>
現時点では研究中のため一部のみ公開。今後公開見込みだが、精度は高そう
</ul>
</li>
</ul>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">利用用途</span></h4><br>
<p>言語を介する作業全般において、様々な応用が可能です。</p>
<p>新事業創出のためのブレーンストーミングや、要件定義から評価まで手助けとなるでしょう。</p>
<p>プロトタイプの作成でも大いに力を発揮します。現在提供されていませんが、画像入力機能が提供されたら</p>
<p>画面イメージから画面そのものを生成することも容易になることが想像できます。</p>
<p> </p>
<p>また、分からないことがあると調査のためWeb検索することが多いですが、</p>
<p>今後はChatGPTにまず聞いてみることが多くなると思われます。</p>
<p><strong>ファクトチェックが大切であることに変わりはありません</strong>が、</p>
<p>プロンプト(※)に「回答の根拠となったURLがあれば教えて」と含めれば、自分で検索しなおす手間も短くすることができます。</p>
<p>※プロンプト: ユーザーからChatGPTに与えられる入力テキストのこと</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">GPT-4を利用したい場合</span></h4><br>
<p>現時点では有料版の「ChatGPT Plus」か「API経由」での利用が可能です。</p>
<p>無料で試してみたい場合は、BingAIに「GPT-4」が採用されているのでそちらを利用しましょう。</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">プロンプトエンジニアリングについて</span></h4><br>
<p>ChatGPTからユーザーが期待する回答を得るためには、プロンプトが重要です。</p>
<p>そのため、プロンプトエンジニアリング(Prompt Engineering)が注目されています。</p>
<p><a href='https://www.promptingguide.ai/jp'>Prompt Engineering Guide(※) の日本語版</a>に一度目を通しておくことをお勧めします。</p>
<p>※AI研究の海外コミュニティDAIR.AIによって作成されたサイト</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">トークン数の限界について知る</span></h4><br>
<p>「GPT-4とGPT-3.5の違い」でも触れましたが、一度に入出力が可能なトークン数には限界があります。</p>
<p>ChatGPTと会話をしていると、少し前に話した内容を忘れているように感じることがあるかと思います。</p>
<p>これは、<strong>ユーザーとChatGPT間の過去のやり取りをトークン数の限界範囲までで再送信しているため</strong>です。</p>
<p> </p>
<p>トークン数は、OpenAIが提供している以下サイトを利用することで計測可能です。</p>
<p>自分が書いた内容が何トークンになるか知りたい方は利用してみてください。</p>
<p><a href='https://platform.openai.com/tokenizer' target='_blank' class='url'>https://platform.openai.com/tokenizer</a></p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">変数を定義して利用する</span></h4><br>
<p>トークン数限界を超える会話が行われている場合でも、ある特定の情報は覚えておいて欲しい場合に</p>
<p>変数を定義して情報を覚えてもらう、という方法があります。</p>
<p> </p>
<p>以下に変数を定義しない場合と、定義した場合の会話例を用意しました。</p>
<ul>
<li>変数を定義しない場合</li>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijjk9yw4H0ehMUCl8qLgABuhfTp88m1UJAcEC8uRp14fhm1xnF0ArrO5Pc98kKsWcszvnS1TBnGqf4kTYxnCujWXNsLTF06kXqC2_ucvh416vFTSRB1gCqfVdhV8Q9EHfUCdLYlta3eoGpgf9_3yFxs86zXAq7V7j-Zj6-icbG9YEtfjKorkPsrB34tg/s1600/image-20230423113212954.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijjk9yw4H0ehMUCl8qLgABuhfTp88m1UJAcEC8uRp14fhm1xnF0ArrO5Pc98kKsWcszvnS1TBnGqf4kTYxnCujWXNsLTF06kXqC2_ucvh416vFTSRB1gCqfVdhV8Q9EHfUCdLYlta3eoGpgf9_3yFxs86zXAq7V7j-Zj6-icbG9YEtfjKorkPsrB34tg/s1600/image-20230423113212954.png" width="650"></a></div>
<p>~ 長いやりとり~</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPQpq7MjQTBufU15OinK80wWVfFoPBJzWrhMHUodVd1WMV7qb3TDgAJH2C5TgRyLiWK_xCJhnBSfD_FI831kgknxUme7knjunXtrdYXHPTCgLBWGZPbVt1tgqOXR3v32V0Yq0oFUhvJ99fcu_-jxyRzV7QeGQ9N2rvO9tGnUJYpkdoasMIXUhuECPUbQ/s1600/image-20230423113246878.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPQpq7MjQTBufU15OinK80wWVfFoPBJzWrhMHUodVd1WMV7qb3TDgAJH2C5TgRyLiWK_xCJhnBSfD_FI831kgknxUme7knjunXtrdYXHPTCgLBWGZPbVt1tgqOXR3v32V0Yq0oFUhvJ99fcu_-jxyRzV7QeGQ9N2rvO9tGnUJYpkdoasMIXUhuECPUbQ/s1600/image-20230423113246878.png" width="650"></a></div>
</ul>
<p> </p>
<ul>
<li>変数を定義した場合</li>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mmYVe0vfmhc3km1qHRftxwmCW5DWCIRiRHOahD2MC-AGld8wLJ5pH5VFx0HR-nbX-51VTZXsOjt6SIvtNMWXlWCoJhejCP4slyW4x3yB63ip9BNy-z7RuCr65sql_aP83xl4Mdu3CPkuTEdFcCu4qdHzwwmkegfcxChIgT7ANsbKkCS3EWJKPnYI0A/s1600/image-20230423113736956.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4mmYVe0vfmhc3km1qHRftxwmCW5DWCIRiRHOahD2MC-AGld8wLJ5pH5VFx0HR-nbX-51VTZXsOjt6SIvtNMWXlWCoJhejCP4slyW4x3yB63ip9BNy-z7RuCr65sql_aP83xl4Mdu3CPkuTEdFcCu4qdHzwwmkegfcxChIgT7ANsbKkCS3EWJKPnYI0A/s1600/image-20230423113736956.png" width="650"></a></div>
<p>~ 長いやりとり~</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_vsMB88tiLInTZH-4Y2EKZ-bPjMItSm-HuuE859OpHJB3wS6SqKtkVyv_-QYGXZF9Zczkt0h9y4ho-feszY8lI6a6bVV9LCIhDAAZq8ODJawfT2I5Ll_08p-REqiU7t9UFPBK1Kn864AQgQkpWSLvyu6mbA35UD61Ky8JS1Dr75pbWfyuZ-R45ngLbw/s1600/image-20230423113815288.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_vsMB88tiLInTZH-4Y2EKZ-bPjMItSm-HuuE859OpHJB3wS6SqKtkVyv_-QYGXZF9Zczkt0h9y4ho-feszY8lI6a6bVV9LCIhDAAZq8ODJawfT2I5Ll_08p-REqiU7t9UFPBK1Kn864AQgQkpWSLvyu6mbA35UD61Ky8JS1Dr75pbWfyuZ-R45ngLbw/s1600/image-20230423113815288.png" width="650"></a></div>
</ul>
<p> </p>
<p>変数を定義した場合、与えた情報を回答してくれていることが確認できます。</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">まとめ</span></h4><br>
<p>まだまだ取り上げたい内容はありますが、今回はここまでにします。</p>
<p>今回取り上げた内容もほんの一部でしかないほど、生成系AIを取り巻く環境は相当なスピードで</p>
<p>進んでいます。特にGPT-4が発表された2023年3月14日以降は、ますます進化が加速していると感じます。</p>
<p> </p>
<p>私自身もChatGPTと会話をする中で、技術的な内容について深く掘り下げられるかどうかは、</p>
<p>自分が持つ技術的な知識量に大きく左右されることを痛感しています。</p>
<p>ChatGPTからの回答に知らない内容が含まれていた場合は、ファクトチェックを行った上で、</p>
<p>正しい情報であれば積極的に吸収するようにしています。</p>
<p>生成系AIに関する最新情報を取得・理解し、同時に自分自身の能力向上を目指していくことが、今後も重要でしょう。</p>
<p> </p>
<p>今回はこのへんで。ではまた!</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-75672273698095032992023-04-14T09:00:00.001+09:002023-04-14T09:00:00.172+09:00PhotoshopのPhotomergeコマンドでパノラマ画像を作成してみた!<div style="text-align: left;">新年度が始まり、会社で懇親会を開催しました。 </div><div style="text-align: left;">その模様を当社のYouTubeチャンネルで公開しています。</div><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><iframe allowfullscreen="" class="BLOG_video_class" height="270" src="https://www.youtube.com/embed/o1Nn9OFfQE4" width="480" youtube-src-id="o1Nn9OFfQE4"></iframe></div><br /><div style="text-align: left;">今回はいつも使用しているDJI Pocket2ではなく、スマホで撮影しました。このところ、スマホではもっぱらショート動画を撮影していたため、横で撮影するのをすっかり忘れていました💦</div><div style="text-align: left;"><br /></div><div style="text-align: left;">動画は何とか横で作成したものの、困ったのはサムネイルです。</div><div style="text-align: left;">いつもは動画から書き出したフレームを使用していますが、横のサムネイルを作成するには縦画像を何枚も並べなければなりません。</div><div style="text-align: left;">調べてみると、Photoshopに複数の画像を1つの画像に合成する機能があるようなので、使ってみました。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><div style="text-align: left;"><div><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-size: medium;">Photoshopの「Photomerge」コマンド</span></h4><div><br /></div></div><div>Photoshopの「Photomerge」コマンドにより、複数の画像を1つの画像に結合することができます。</div><div>使い方は簡単で、ファイルー自動処理ーPhotomergeでダイアログを開き、画像ファイルを指定して、「OK」を押すだけです。</div><div><br /></div><div>今回指定したファイルは、</div><div><table><tbody><tr><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjElzLPhrpkJ8a6MimneB7GcVGRN1MWdUgpkkR_ec7eBycaJGFZdh4AlHOahbPp-Buq48v49GYBdW7uCE-cQwjZt-pPSWRUAQc8o_EP-Ow6mbPTbxDdYK4Dx7I9hKV0D-vBKnA7mETtQOZNy658PCtXFhpqpPi5XLJOTlf_VwmfaqkH5MwZOD1-RpIB/w113-h200/thumb6.jpg" width="108" /></div></td><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDut_JtKk4zKkqhQFuZQpi_FIF4GEVC4uChGnbP03G5Ms8mWaPUTJNtiSVnd7v3_O8qzW2HEjTmdaf0ZFlHieYaAqgv2saZ00ILRmQur1uGI7DHvz0FSw_wZgY_MThc3777dhyVMLmHg06y82wkNUoVmvvdtqH9Mm9c5UaPbZ5gSL0diYLaKJWh5Ga/w113-h200/thumb5.jpg" width="108" /></div></td><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTj47Yy2wXeN9LdPUf-8ImYJsO9ENJ7huHcjqPYJ98XvxoxsDCKSxLBdMd_c5WlZoQPZPeGZPIPhcDqoDt0j6roSHGuAdSy1cqfFKUeNFyhBBtmS-qASVqj0pAgAyvfo_2N23qEs5f9Kg6MJANq0kR9lv8C5S6OENZp-t4KokneojpDRFj6STjbOc/w113-h200/thumb4.jpg" width="108" /></div></td><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK-8HRzxHqtz5E1EIBscecdp8o1HH4m9sd2d-HTA_lKbPlvu40peRtMsPh-hHceERLtqGh5QMpVJH_5dI_gqffLKas5oglsVrSqvEIqMOx595Q2Sj6nljEUohCRZVxW1H08HCT7J5wvP84q9ynnzsNP6jvq-kwzqENz7jkECkZlbcf6tl46atme1bO/w113-h200/thumb3.jpg" width="108" /></div></td><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-wfcCzoLjqZSyb5Ya2cvqkoVj7HA3CgtfiUX_raWLN6yo4BTNcYu6XSRU70UnIM35IePdqqwV5z6hFdK_M2jyMMNsDL03d4K124l_cJPXwgD-rJm2nN285pjK6uNHmaBe2D7RhP7-p_C2QW5V5HlpqDBaAXMsKCUe-r6npt8nQQotmxpms2aTAGNq/w113-h200/thumb2.jpg" width="108" /></div></td><td><div class="separator" style="clear: both; text-align: center;"><img border="3" data-original-height="1920" data-original-width="1080" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjabVq5nTKiWwHOFsE19mGsVWqTxWnTLL5HkH6-blt9fQZzQ_YH7V7kI_DNw2j0QHZYSuaz1xd3O-ypfoMmVlCtHpJY-qojkv45OVmdQXOTd_42ADlYBqDN_R5ubujsA_ha2wuMpSjlk81JUFF09RTg3yeD84Q6QEriuVhGGrSf8qmIagY-eqTXvYNT/w113-h200/thumb1.jpg" width="108" /></div></td></tr></tbody></table></div><div><br /></div><div>の6つで、これらを合成すると下の画像が作成されました。この画像をトリミングしてサムネイルを作成しました。</div><div><img border="0" data-original-height="3146" data-original-width="3320" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqAX3JCZ07JWt8ZD5JLwz1MfXLvddOVEBj98FoFn-tGUczGAHSTS6jpqiC0af7dvOAHM8Doh7Y5dLRq4EILqcLo6m1k_loik3GCsjaLrnPf8xS07poPVLDdadCSZn3peqQ1SgRekCBO3gC3wX1UFzfuT6Hy18EkwIm2nOlxqoiOZcQJ1olIDgjH5Oy/w320-h302/%E3%83%8F%E3%82%9A%E3%83%8E%E3%83%A9%E3%83%9E.png" width="320" /></div><div><br /></div><div>Adobeのサイトを見ると、「各画像の約40%の領域重ねる」とあり、重なりが多くても少なくてもダメなようで、実際、満足いく合成画像を得るまで、何度か画像を変更して試しました。それでも自動で、ここまでの画像を作成してくれるのですから、助かります。</div><div><br /></div><div><br /></div><div>またいつか、どこかで。</div></div>つじhttp://www.blogger.com/profile/12845659453896114379noreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-42081261490132839322023-04-07T09:00:00.196+09:002023-04-13T09:09:57.187+09:00archiveEvery="Day"でローテート!ーNLogでログを出力する③<p> </p><p>こんにちは、せんです。</p><p>NLogを使ったログ出力まとめの3回目です。</p><p><a href="https://aimek-developer.blogspot.com/2023/03/nlog.html">第1回:インストールから出力まで</a><br /></p><p><a href="https://aimek-developer.blogspot.com/2023/03/nlog_0405279606.html">第2回:出力フォーマットのカスタマイズ</a><br /></p><p><br /></p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">アーカイブを残すには</span></h4><div><br /></div><div><br /></div><div>ログを出力するときに合わせて考えるのが、アーカイブとローテートです。</div><div><br /></div><div>前回までの内容で、App.configのターゲット要素は以下のようになっています。</div>
<pre class="prettyprint"><span style="font-family: verdana;"><target name="logFile"
xsi:type="File"
encoding="UTF-8"
fileName="logs/${processname}.log"
layout="${date} ${level:uppercase=true:padding=-5} -${message} ${exception:format=tostring}" /></span></pre><div><br /></div><div>この状態でプログラムを数回実行すると、</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRp5_5iSESgENUEuGqF3TXYRB3nDP5bC6AJDQG_uVZz7Br0x9eoBG-Qa-69h8IMbLM2AFZ-tNwsC2Of5nAzJISc7r5q-s5FL0Z1Iasxm_kUnTh96v4xguuBEIU0zfz_loW8X3hqCNmyxtNQU5sdQ3W4CnNdFEE0V_ew7321k1LNlqLajtfdpPFN9JnWQ/s842/%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%20(41).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="629" data-original-width="842" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRp5_5iSESgENUEuGqF3TXYRB3nDP5bC6AJDQG_uVZz7Br0x9eoBG-Qa-69h8IMbLM2AFZ-tNwsC2Of5nAzJISc7r5q-s5FL0Z1Iasxm_kUnTh96v4xguuBEIU0zfz_loW8X3hqCNmyxtNQU5sdQ3W4CnNdFEE0V_ew7321k1LNlqLajtfdpPFN9JnWQ/w542-h406/%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%20(41).png" width="542" /></a></div><div><br /></div>と、こんな感じで内容が追記されていきます。<div><br /></div><div>ログ出力の日時が書かかれているとはいえ、延々と一つのファイルに書き込まれるのでは、確認が大変ですよね。</div><div><br /></div><div>というわけで今回は</div><div><br /></div><div>①区切りのいいところでログファイルを分ける。</div><div>②古いログファイルを保存する。</div><div>③一定のアーカイブファイルがたまったら、それを削除する。</div><div><br /></div><div>の3つの作業を行うことで、ログファイルを管理していきたいと思います。</div><div><br /></div><div><br /></div><div><br /></div><div>① 区切りのいいところでログファイルを分ける</div><div><br /></div><div>サイズか日時を設定して、ログを「ローテート」します。</div><div>archiveEveryや、archiveAboveSizeというプロパティを使用します。</div><div><br /></div><div><br /></div><div>②古いログファイルを保存する</div><div><br /></div><div>ローテート後の古いログファイルは、ファイル名を変更しアーカイブフォルダに移動させるなどして保存することができます。</div><div>使用するプロパティはarchiveFileName、archiveNumbering、archiveDateFormatです。</div><div><br /></div><div><br /></div><div>③一定のアーカイブファイルがたまったら、それを削除する。</div><div><br /></div><div>ファイルの保存数、もしくはファイルの保存日数を指定することで、それを超過した場合はファイルが自動で削除されます。</div><div>maxArchiveFiles、maxArchiveDaysプロパティを使用します。</div><div><br /></div><div><br /></div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">ターゲットプロパティまとめ</span></h4><div><br /></div></div><div><br /></div><div>NLog公式の説明から、ローテートとアーカイブに関するターゲットプロパティをまとめます。</div><div><br /></div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveEvery.htm">archiveEvery</a>:指定した時間が経過するたびにログファイルを自動アーカイブするかどうか。</div><div> 年月日時分のほか、毎週〇曜日という指定ができる。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveAboveSize.htm">archiveAboveSize</a>:ログファイルが自動的にアーカイブされるサイズをバイト単位で取得、設定。</div><div> archiveNumbering="Date"との併用は不可。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveEvery.htm">archiveOldFileOnStartup</a>:起動時に古いログファイルをアーカイブするかどうか。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveFileName.htm">archiveFileName</a>:アーカイブに使用するファイルの名前を取得、設定。</div><div> 方法ごとに一連の数字に置き換えられるプレースホルダ{#####}を含められる。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveDateFormat.htm">archiveDateFormat</a>:ファイルアーカイブに使用する日付形式を指定。</div><div> archiveNumbering="Date"または”DateAndSequence”の場合にのみ機能する。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_ArchiveNumbering.htm">archiveNumbering</a>:ファイルアーカイブに番号を付ける方法。</div><div> archiveNumberingMode</div><div> ・Sequence:シーケンススタイル。最新のアーカイブに最大値。</div><div> ・Rolling:ローリングスタイル。最新は常に#0、#1、…、#Nと続く。</div><div> ・Date:日付スタイル。前回の日時を記載する。</div><div> ・DateAndSequence:日付とシーケンススタイル。</div><div>●<a href="https://nlog-project.org/documentation/v4.3.0/html/P_NLog_Targets_FileTarget_MaxArchiveFiles.htm">maxArchiveFiles</a>:保持するアーカイブファイルの最大数。</div><div>●<a href="https://nlog-project.org/documentation/v4.7.0/html/P_NLog_Targets_FileTarget_MaxArchiveDays.htm">maxArchiveDays</a>:保持するアーカイブファイルの最大日数。</div><div><br /></div><div><br /></div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">組み合わせて使ってみましょう!</span></h4></div><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;"><br /></span></div><div>まずはこんな組み合わせで実行します。</div><div><span style="font-weight: 400;"><br /></span></div><div><span><div><span style="background-color: #eeeeee;"> archiveEvery="Minute"</span></div><div><span style="background-color: #eeeeee;"> archiveFileName="logs/archives/${processname}_{#}.log"</span></div><div><span style="background-color: #eeeeee;"> archiveNumbering="Date"</span></div><div><span style="background-color: #eeeeee;"> archiveDateFormat="yyyyMMddHHmmss"</span></div><div><span style="background-color: #eeeeee;"> maxArchiveFiles="3"</span></div><div><br /></div><div>ついでにプログラムも変更します。</div><div><br /></div><div><pre class="prettyprint"><span style="font-family: verdana;">using System;
using NLog;
namespace UseNLogSample
{
public class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
var timer = new System.Threading.Timer(x => GivenMilletDumplings(), null, 1000, 10000);
Console.ReadKey();
}
private static void GivenMilletDumplings()<br /> {
var companions = new string[] { "犬", "猿", "雉" };
foreach (var companion in companions)
{
logger.Info($"{companion}は桃太郎からきびだんごをもらいました。");
}
}
}
}</span></pre></div><div><br /></div></span></div><div>プログラムを実行してlogsフォルダを確認します。</div><div>archivesフォルダが生成され、その中にアーカイブファイルが三件追加されます。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPLIuPomQVr34TVYk2f9igNLUE7HYzpjJKPkT24qcj8hEXaz9kSmlbkqdimcIm4JgxeA71_66aIBj-zqzsKaosMJ1l7Yo0c0ZKku3DnJJl-xEMWv9NvoNBVUV23Vpshpd7mVmf-Z3GB9FCLF1DUuEadNkiz3fyMBeO2PyP2C7OFiKdcYnbpZVrRFNCGg/s978/%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%20(55).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="883" data-original-width="978" height="447" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPLIuPomQVr34TVYk2f9igNLUE7HYzpjJKPkT24qcj8hEXaz9kSmlbkqdimcIm4JgxeA71_66aIBj-zqzsKaosMJ1l7Yo0c0ZKku3DnJJl-xEMWv9NvoNBVUV23Vpshpd7mVmf-Z3GB9FCLF1DUuEadNkiz3fyMBeO2PyP2C7OFiKdcYnbpZVrRFNCGg/w494-h447/%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%20(55).png" width="494" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><div><br /></div><div><br /></div><div><div>分単位でローテートしますが、もっとも古いファイルが削除されているので、フォルダ内のファイル数は三件のままです。</div></div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj71LyZ9rB5xHQynURbtHngk9c4pPNqRN7fC1o1dguLDNdxZ4wxDZFy4Z9p1br-UY6aVcui2CKJfNrcaGsVUzpQGuc0pklIRebmqamaf52SfbvBTx4NDYQSjfGN-nu2KG7914uokXDaKi2gIHCodTkSfTAIyoImmWckeGSKb9Gk96tGtY8l1yESG9_IlA/s984/%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%20(56).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="892" data-original-width="984" height="469" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj71LyZ9rB5xHQynURbtHngk9c4pPNqRN7fC1o1dguLDNdxZ4wxDZFy4Z9p1br-UY6aVcui2CKJfNrcaGsVUzpQGuc0pklIRebmqamaf52SfbvBTx4NDYQSjfGN-nu2KG7914uokXDaKi2gIHCodTkSfTAIyoImmWckeGSKb9Gk96tGtY8l1yESG9_IlA/w518-h469/%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%20(56).png" width="518" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><div>次に、内容を少し変えてみます。</div><div><br /></div><div><div><span style="background-color: #eeeeee;"> archiveAboveSize="2000"</span></div><div><span style="background-color: #eeeeee;"> archiveFileName="logs/archives/${processname}_{#}.log"</span></div><div><span style="background-color: #eeeeee;"> archiveNumbering="Sequence"</span></div><div><span style="background-color: #eeeeee;"> maxArchiveFiles="5"</span></div></div><div><br /></div><div>archivesフォルダを確認すると、アーカイブファイルには0から始まるシーケンシャルな番号が振られています。</div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggpvswToamPAe9KSnmgiHLaz3KukKUcs9iqbIj8g5xDh9E1FQxrRBci0jFgwn-Slk3wpOyPoWJF3P4nabEj8S_WDLb4yyIEgKqqNxZdOjd9SYlitN1Z1OhAiFNNS7vXQkIc_fQfgUscXiZIZ0P5B8yCfYik4WoshfB8_u9kNYDB7lo-MxrYaUojmV0zw/s922/%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%20(47).png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="760" data-original-width="922" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggpvswToamPAe9KSnmgiHLaz3KukKUcs9iqbIj8g5xDh9E1FQxrRBci0jFgwn-Slk3wpOyPoWJF3P4nabEj8S_WDLb4yyIEgKqqNxZdOjd9SYlitN1Z1OhAiFNNS7vXQkIc_fQfgUscXiZIZ0P5B8yCfYik4WoshfB8_u9kNYDB7lo-MxrYaUojmV0zw/w504-h416/%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%20(47).png" width="504" /></a></div><div><br /></div><div><br /></div><div>少し後にもう一度覗いてみると、これまた古いファイルが自動削除されました。</div><div>maxArchiveFilesの変更が反映されていることも確認できます。</div></div><div><br /></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIC7S1uktnDjlgxDjqb_LElB3w0nm_U14sXh5ePbgIjugcwWnktSkcMOKAYjU4PK5E4OVhGfsiN9QD0sv58AurG_5_E96SHtvouUWNyLH1LUE29U_vN4swY-IvYkOa-ZvWRvb9wFFumptq9im4D3OJhYbIMy3kjZ_xajN4jzbEUgEmxSafpy5AwOFBjg/s927/%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%20(48).png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="770" data-original-width="927" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIC7S1uktnDjlgxDjqb_LElB3w0nm_U14sXh5ePbgIjugcwWnktSkcMOKAYjU4PK5E4OVhGfsiN9QD0sv58AurG_5_E96SHtvouUWNyLH1LUE29U_vN4swY-IvYkOa-ZvWRvb9wFFumptq9im4D3OJhYbIMy3kjZ_xajN4jzbEUgEmxSafpy5AwOFBjg/w501-h416/%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%20(48).png" width="501" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><div>それでは次はこんな感じで。</div><div><br /></div><div><div><span style="background-color: #eeeeee;"> archiveAboveSize="2000"</span></div><div><span style="background-color: #eeeeee;"> archiveFileName="logs/archives/${processname}_{#####}.log"</span></div><div><span style="background-color: #eeeeee;"> archiveNumbering="Rolling"</span></div><div><span style="background-color: #eeeeee;"> maxArchiveFiles="10"</span></div></div><div><span style="background-color: #eeeeee;"><br /></span></div><div><span style="background-color: white;">アーカイブファイルに割り振られた番号は、指定の通り五桁になっています。</span></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOPhxIVMmAVFPW3Rk9JR5R091v7Iq9bEW195hZo9PfPOuUcuLhg9kpLvopgD3QQxgagKgXRQ89ITy177RTp6xamTLM48tTpUyLTdLN1pqC427wQAt9qZSNnxscAGjwOKX_Y3HsN_84X5Hy5i-jHlmi5GDwvDoAlMeUukxtCgzBnLMP1pgUaxR_jz5QQ/s927/%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%20(49).png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="903" data-original-width="927" height="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIOPhxIVMmAVFPW3Rk9JR5R091v7Iq9bEW195hZo9PfPOuUcuLhg9kpLvopgD3QQxgagKgXRQ89ITy177RTp6xamTLM48tTpUyLTdLN1pqC427wQAt9qZSNnxscAGjwOKX_Y3HsN_84X5Hy5i-jHlmi5GDwvDoAlMeUukxtCgzBnLMP1pgUaxR_jz5QQ/w525-h512/%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%20(49).png" width="525" /></a></span></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;">しばらくしてから覗くと、新しいファイルに置き換わっていますが、ファイル名は同じです。</span></div></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdnfMg-UV9Dt-sGpNUGzyFYy44RV-c_zUNtmQulMvTd3s8D2kJfkSCts4rwSR7AjQEN8ML4f_gqLFpoc1T7zlEaLbsdywF3Pe6sFL6YXM8zNMJI8TB_wxVODibhQPcRvFRezqJ3Ar1r7ND9P9WPckXH9SC2xoq8Xbzx6PmXVwFFPDb0Q6lKSMOdzDMcA/s921/%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%20(50).png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="891" data-original-width="921" height="513" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdnfMg-UV9Dt-sGpNUGzyFYy44RV-c_zUNtmQulMvTd3s8D2kJfkSCts4rwSR7AjQEN8ML4f_gqLFpoc1T7zlEaLbsdywF3Pe6sFL6YXM8zNMJI8TB_wxVODibhQPcRvFRezqJ3Ar1r7ND9P9WPckXH9SC2xoq8Xbzx6PmXVwFFPDb0Q6lKSMOdzDMcA/w530-h513/%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%20(50).png" width="530" /></a></span></div><div><span style="background-color: white;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div><span style="background-color: white;"><br /></span></div><div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">ここからが本題</span></h4></div><div><br /></div><div><br /></div><div><div><span style="background-color: #eeeeee;"> archiveEvery="Day"</span></div><div><span style="background-color: #eeeeee;"> archiveFileName="logs/archives/${processname}_{#}.log"</span></div><div><span style="background-color: #eeeeee;"> archiveNumbering="Date"</span></div><div><span style="background-color: #eeeeee;"> archiveDateFormat="yyyyMMdd"</span></div><div><span style="background-color: #eeeeee;"> maxArchiveFiles="10"</span></div></div><div><br /></div><div>上の設定でプログラムを実行します。</div><div>(※メモ:archiveDateFormatの値はarchiveNumbering="Date"に対応するデフォルト値と同じなので、ここではarchiveDateFormatプロパティはなくてもよい。)</div><div>次の日にもう一度実行すると、前日のファイルがアーカイブフォルダに移されました!!!</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGU-pLNlSpvxQYXLbUHfVUYcRBFGvXgbyZO0Ko-JkU1Jm_1juVqqEsy-TZG9FHMb2MJi0LFVx_IFinLq0i3IT1FHbCc41n9wjLrplQ3RaxyIMQmSUEHLK59ScihOZfsKldWBK8jTJrltstw2bjcxucpMoNAQuJZj2TaTLY_uz-FwehZ3XReCTI3Erww/s1017/%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%20(52).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="886" data-original-width="1017" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGU-pLNlSpvxQYXLbUHfVUYcRBFGvXgbyZO0Ko-JkU1Jm_1juVqqEsy-TZG9FHMb2MJi0LFVx_IFinLq0i3IT1FHbCc41n9wjLrplQ3RaxyIMQmSUEHLK59ScihOZfsKldWBK8jTJrltstw2bjcxucpMoNAQuJZj2TaTLY_uz-FwehZ3XReCTI3Erww/w512-h446/%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%20(52).png" width="512" /></a></div><div><br /></div><div>うれしいけど...</div>あれ、前にやったときはarchiveEvery="Day"だとarchiveフォルダすら作られなかったんだけど、なにか設定が違ったかしら???と思い、調べてみたところ、fileNameを固定の値にしないとアーカイブできないという記事を拝見しました。<div><div>(参考記事):<a href="https://qiita.com/mak_in/items/b64899b27b5fcf472daa">https://qiita.com/mak_in/items/b64899b27b5fcf472daa</a><br /><div><br /></div><div>たしかに、前作った設定ファイルは</div><div>fileName="logs/NLogSample_${date:format=yyyyMMdd}.log"</div><div>という名前にしている...</div><div><br /></div><div>でもarchiveEvery="Minute"にすると、ローテートできたんですよね...</div><div>まだよくわからない...</div><div><br /></div><div><br /></div><div>さらに調べているとこんな記事も。</div><div>(参考記事):<a href="https://nakashima-toshiki.xyz/2021/03/19/2455/">https://nakashima-toshiki.xyz/2021/03/19/2455/</a></div><div>最初からログファイル名に日付があれば、archiveEvery="Day"もarchiveFileName="○○"もいらないんじゃない?ということが読み取れます。</div><div>ファイル名に日付を指定していれば、別日に実行した時点で別のファイルに書き込まざるを得ないからです。</div><div><br /></div><div>というわけで、以下の設定で実行します。</div><div><br /></div><div><div><span style="background-color: #eeeeee;"><target name="logFile"</span></div><div><span style="background-color: #eeeeee;"><span style="white-space: pre;"> </span>xsi:type="File"</span></div><div><span style="background-color: #eeeeee;"><span style="white-space: pre;"> </span>encoding="UTF-8"</span></div><div><span style="background-color: #eeeeee;"><span style="white-space: pre;"> </span>fileName="logs/${processname}_${date:format=yyyyMMddHHmm}.log"</span></div><div><span style="background-color: #eeeeee;"><span style="white-space: pre;"> </span>layout="${date} ${level:uppercase=true:padding=-5} -${message} ${exception:format=tostring}"</span></div><div><span style="background-color: #eeeeee;"><span style="white-space: pre;"> </span>maxArchiveFiles="5"/></span></div></div><div><br /></div></div><div>※時間の都合上、分まで指定しています。</div><div><br /></div><div>logsフォルダにmaxArchiveFilesの値+1のファイルが保存されます。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4C_3_7_f2NJeB--QiwsVNm92JQG7XiuIUnHg-APLuVhkZiS2929VO8MxMGhjC5Jo4-PZ8sCU99zvlDFCtAra_n0HMShMrrKlXQBCWk7sUW9GGhNKKg8xVmoFJeiijkfNH0JoLZNGy_JgFA-MAzxeWqKUg-YSSjEzeObcD48-ysM9gmJL-y52I1xIs7w/s917/%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%20(54).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="595" data-original-width="917" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4C_3_7_f2NJeB--QiwsVNm92JQG7XiuIUnHg-APLuVhkZiS2929VO8MxMGhjC5Jo4-PZ8sCU99zvlDFCtAra_n0HMShMrrKlXQBCWk7sUW9GGhNKKg8xVmoFJeiijkfNH0JoLZNGy_JgFA-MAzxeWqKUg-YSSjEzeObcD48-ysM9gmJL-y52I1xIs7w/w524-h340/%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%20(54).png" width="524" /></a></div><br /><div><br /></div><div>わあ、やっぱりできるんだ...</div><div>この辺はケースバイケースですが、どちらも頭に置いておきたいです。</div><div><br /></div><div><br /></div><div><br /></div><div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">まとめ</span></h4></div><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;">ということで、全3回でNLogについてまとめてまいりました。</span></div><div><span style="font-weight: 400;">これまでarchiveEvery="Day"でローテートできたことがなかったので、</span></div><div>日付ローテートすることが裏テーマだったのですが、</div><div>なんとかひと段落できてよかったです。</div><div><br /></div><div><br /></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-3974641709978357712023-03-24T09:00:00.007+09:002023-03-24T09:00:00.190+09:00レイアウトのカスタマイズーNLogでログを出力する②<p><br /></p><p>こんにちは。せんです。 </p><p>今回も前回に引き続き、NLogを使用したログ出力についてまとめていきます。</p><p><a href="https://aimek-developer.blogspot.com/2023/03/nlog.html">(前回の内容)インストール、基本設定、出力</a></p><p>今回のテーマは「レイアウトの編集」です。</p><p><br /></p><p><br /></p><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">前回の出力結果を確認します。</span></h4><div><br /></div><div>まずは、前回の設定でどのようにログが出力されたか振り返ってみましょう。</div><div>App.configは前回のままです。</div><div><br /></div>
<pre class="prettyprint"><span style="font-family: verdana;"><?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="logFile"
xsi:type="File"
encoding="UTF-8"
fileName="logs/${processname}.log"
layout="${date} [${level}] -${message}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logFile" />
</rules>
</nlog>
</configuration></span></pre><div><br /></div><div>Program.csは少し変更しています(例外をキャッチします)。</div>
<pre class="prettyprint"><span style="font-family: verdana;">using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
using NLog;
namespace UseNLogSample
{
public class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
logger.Info("NLogでinformationログを出力します。");
logger.Warn("NLogでwarningログを出力します。");
var companions = new string[] { "inu", "saru", "kiji" };
try
{
Console.WriteLine(companions[3]);
}
catch (Exception ex)
{
logger.Error(ex, "NLogでerrorログを出力します。");
}
}
}
}</span>
</pre><div><br /></div><div>これを実行すると、logsフォルダにUseNLogSample.logが生成されます。</div><div>その内容はこんな感じです。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBwSjPkIRXstJT_bUh8sY-vpv6S75tzwBMivSHssvwtlRdaNsNnld3NGlYdsIKDasHwHJLequvE94d3pH99JZmwnSOHFnUuS0DOASEtW2DJ1vAjBZbGQWsJvueIWFhZQ2WYMeiDHzIgy82Vy2UOk5WZyUcWVP6drj75HxoKojZaps2WkRjvYPeAyfv0g/s843/%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%20(25).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="843" height="329" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBwSjPkIRXstJT_bUh8sY-vpv6S75tzwBMivSHssvwtlRdaNsNnld3NGlYdsIKDasHwHJLequvE94d3pH99JZmwnSOHFnUuS0DOASEtW2DJ1vAjBZbGQWsJvueIWFhZQ2WYMeiDHzIgy82Vy2UOk5WZyUcWVP6drj75HxoKojZaps2WkRjvYPeAyfv0g/w648-h329/%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%20(25).png" width="648" /></a></div><br /><div>これを見ると、なんとなくこう思います。</div><div>・ちょっと日付フォーマットを変えたいなあ...</div><div>・メッセージの先頭位置を揃えたいなあ...</div><div>・IndexOutOfRangeExceptionが発生しているはずなんだけど、これだとわからないなあ...</div><div><br /></div><div>というわけで、</div><div><span style="background-color: #9fc5e8; font-family: verdana;">layout="${date} [${level}] -${message}"</span></div><div>の部分を編集し、いろんなパターンを出力して確認していきます!!!</div><div><br /></div><div><br /></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">日時フォーマットを変更してみる</span></h4><div><br /></div><div><span style="background-color: white;"><span style="font-family: verdana;"><a href="https://nlog-project.org/config/?tab=layout-renderers">公式ドキュメント</a>のLayout renderersタブを確認すると、Date and timeという項目があります。</span></span></div><div><span style="background-color: white;"><span style="font-family: verdana;"><br /></span></span></div><div><span style="background-color: white;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ArbKDHxS2AaNHk9MUAIcufyA2XRXPbVXTN9rJJoSi_AkSk6kONIFILbhIfYaX6HwvlIv4dF0tRHKn0JSPoWSFKJJi7j9PQ5IWZNbP2sStS6TSSqbk7hqaorPZI1QzQT5NHuYdJvRePkgxHi8mO4gkCRcDxBxqrTwhPYEFs_HT_Cpv5Emhff5L3XE6w/s634/%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%20(26).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="137" data-original-width="634" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7ArbKDHxS2AaNHk9MUAIcufyA2XRXPbVXTN9rJJoSi_AkSk6kONIFILbhIfYaX6HwvlIv4dF0tRHKn0JSPoWSFKJJi7j9PQ5IWZNbP2sStS6TSSqbk7hqaorPZI1QzQT5NHuYdJvRePkgxHi8mO4gkCRcDxBxqrTwhPYEFs_HT_Cpv5Emhff5L3XE6w/w626-h135/%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%20(26).png" width="626" /></a></div><br /><span style="font-family: verdana;">先に使用した${date}のほかに4つのパターンがあったので、それぞれ出力してみました。</span></span></div><div><span style="background-color: white;"><span style="font-family: verdana;">①${longdate}</span></span></div><div><span style="background-color: white;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ZOYeKGe9lcPcxzzQFM0NxQzVrlEIZ4QgiCGO3mx1WDWL5G2wnEicgK4vc-Levp50Kn9MqXTYBVyJJsyKmVn4c7Qw2gzxFavoC9npJjFCkWZev0bgbzdu7WeA_knQaZ1gphe9ELYopEMcd6e4gnarbQ5TYs41683LyzYPUgcHMPosvG7r1cTobrLvng/s842/%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%20(27).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="842" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ZOYeKGe9lcPcxzzQFM0NxQzVrlEIZ4QgiCGO3mx1WDWL5G2wnEicgK4vc-Levp50Kn9MqXTYBVyJJsyKmVn4c7Qw2gzxFavoC9npJjFCkWZev0bgbzdu7WeA_knQaZ1gphe9ELYopEMcd6e4gnarbQ5TYs41683LyzYPUgcHMPosvG7r1cTobrLvng/w560-h284/%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%20(27).png" width="560" /></a></div></span></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;"><br /></span></div><div><span style="background-color: white;">②${shortdate}</span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYXtAEh1GKgWhDin9XCac9YzqWSwDfMD5PqL9y_tuxOCdHsCTIA1m08OusgnqP9gIl9yrh9eLskuLUXZu_ggMC2QvgaXrllmlAt1uSajNFqZg_qRDgwbyLMJ57BUfB8dOReBago-rW_M5qOplNSChSWg_7UcQ7_obTWXVHbzbgSZUvf9saAaefrAUKPw/s846/%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%20(28).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="846" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYXtAEh1GKgWhDin9XCac9YzqWSwDfMD5PqL9y_tuxOCdHsCTIA1m08OusgnqP9gIl9yrh9eLskuLUXZu_ggMC2QvgaXrllmlAt1uSajNFqZg_qRDgwbyLMJ57BUfB8dOReBago-rW_M5qOplNSChSWg_7UcQ7_obTWXVHbzbgSZUvf9saAaefrAUKPw/w560-h285/%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%20(28).png" width="560" /></a></div><div><br /></div><div><br /></div><div>③${ticks}</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZYbPuNhAfClThNqRoP2dtL_OGMubfr0T5qWVO0RLAOAQD1wn4z-EeGiPpH7F25Av01Ocji68pVFSctg-rYOTC7iEr18Bvg15ZkJ3aScJlYrIl0slvZNisrc2TkdbioJiJ3WNkvi9X8uNVKMSCfidRb2MV7CxJKDgGD5uBUMkUBAWdhcHNdpbdx4-3cg/s835/%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%20(29).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="419" data-original-width="835" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZYbPuNhAfClThNqRoP2dtL_OGMubfr0T5qWVO0RLAOAQD1wn4z-EeGiPpH7F25Av01Ocji68pVFSctg-rYOTC7iEr18Bvg15ZkJ3aScJlYrIl0slvZNisrc2TkdbioJiJ3WNkvi9X8uNVKMSCfidRb2MV7CxJKDgGD5uBUMkUBAWdhcHNdpbdx4-3cg/w585-h295/%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%20(29).png" width="585" /></a></div><div><br /></div><div>④${time}</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimoTtcS9Lr28ix5iWPdXGrZ10aHqG9C32iju5u00AM18kn1R7a_9lQCWXpZtBwiIF1kKvpjmlI21-zx6dBQ_9hBz8JGr1WMU5InZDZmPs2g2FeNKG8BK7Jb26kJcHztWcGf-MadzaP1gYlX9XgcAp2i8-IeusIA178t1cWYpOc18iOJm-o-OQHN6jv6w/s841/%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%20(31).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="841" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimoTtcS9Lr28ix5iWPdXGrZ10aHqG9C32iju5u00AM18kn1R7a_9lQCWXpZtBwiIF1kKvpjmlI21-zx6dBQ_9hBz8JGr1WMU5InZDZmPs2g2FeNKG8BK7Jb26kJcHztWcGf-MadzaP1gYlX9XgcAp2i8-IeusIA178t1cWYpOc18iOJm-o-OQHN6jv6w/w595-h300/%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%20(31).png" width="595" /></a></div><div><br /></div><div><br /></div><div>また、Date and timeの各レンダラーには次のようなパラメータも用意されています。</div><div><div>・universalTime(${ticks}以外):UTC時間を出力</div><div>・format(${date}のみ):日付形式を指定</div><div><div> etc</div><div><br /></div><div>ここでは2つ目のformatを使って以下のように編集してみます。</div><div>layout="<span style="background-color: #9fc5e8;">${date:format=yyyyMMdd HH\:mm\:ss,fffff}</span> [${level}] -${message}"</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBDJb4HIG8ZTQQRYUKJl7RFiQF57sqvPusJYVWr9X4CWD5IgUN75K0YBRjWM7L0MaGxp1R-mVMAwNlAgyd00PyuHMggMytAG0q-hs8P7zmdJDRgTbf1eoXTS14RigyUTPKLemiiggDY18GZrP5L0V9cGneXZXVEJIB58nOXjDYsLH3WeoTIa2-Avz9AQ/s842/%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%20(32).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="842" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBDJb4HIG8ZTQQRYUKJl7RFiQF57sqvPusJYVWr9X4CWD5IgUN75K0YBRjWM7L0MaGxp1R-mVMAwNlAgyd00PyuHMggMytAG0q-hs8P7zmdJDRgTbf1eoXTS14RigyUTPKLemiiggDY18GZrP5L0V9cGneXZXVEJIB58nOXjDYsLH3WeoTIa2-Avz9AQ/w571-h291/%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%20(32).png" width="571" /></a></div><div><br /></div>➥年月日がyyyyMMdd形式で表示され、ミリ秒が5桁表示されていることがわかります。<br /><div><br /></div></div></div><div><br /></div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">ログレベルのフォーマットを変更してみる</span></h4><div><br /></div><div>それでは次に、ログレベルの部分を見ていきます。</div><div><br /></div><div>App.configのrules要素にターゲットごとのログレベルが指定できることを先に確認しておきます。</div>
<pre class="prettyprint"><span style="font-family: verdana;"><rules>
<logger name="*" minlevel="Info" writeTo="logFile" />
</rules></span></pre><div><br /></div><div><br /></div><div><div>ログレベルに関する変更は</div><div>・すべて大文字で表示する</div><div>・5文字幅で、左詰め表示する</div><div>の2点です。</div></div><div><br /></div><div>まず、すべて大文字で表示するには、パラメータuppercaseをtrueに設定します。</div><div>${level:uppercase=true}</div><div>と記述します。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj-OsyIhpyM0JSu4vquIcS2EEyfyXIxBuu78HwepmBflUCS420FwfC-JsgfEzl6kArmVZ3Q930Yuhq8ija0TH5z69lKz48G9TpaBKt2-FGZ4ZsgyFrsx48iGtWorrp1hYF4nDf0NwT1mvu-QdwLHBCJUsoHthy3C4d4Ykg_2PqxIrEAqIdDTA0cuxgWg/s846/%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%20(33).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="846" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj-OsyIhpyM0JSu4vquIcS2EEyfyXIxBuu78HwepmBflUCS420FwfC-JsgfEzl6kArmVZ3Q930Yuhq8ija0TH5z69lKz48G9TpaBKt2-FGZ4ZsgyFrsx48iGtWorrp1hYF4nDf0NwT1mvu-QdwLHBCJUsoHthy3C4d4Ykg_2PqxIrEAqIdDTA0cuxgWg/w574-h288/%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%20(33).png" width="574" /></a></div><br /><div>➥大文字表記に変わりました。</div><div><br /></div><div><br /></div><div>次に、5文字幅で左詰めします。</div><div>この際にはパラメータpaddingを使用します。</div><div><a href="https://nlog-project.org/documentation/v2.0.1/html/P_NLog_LayoutRenderers_Wrappers_PaddingLayoutRendererWrapper_Padding.htm">公式</a>の通り、padding=(正の数)に設定すると左側が空文字で埋まります(→右詰め)。</div><div>padding=(負の数)に設定すると右側が空文字で埋まります(→左詰め)。</div><div><br /></div><div>というわけで</div><div>${level:uppercase=true:padding=-5}</div><div>と記述し、実行します。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKvdY9iG1tN25Vo-X7jilcGi_l-DEATjyZB5p5W2-eytGvWR1_Et6KBGJJBv-qs7YrqVXFXzyTvMS9A7H_5x0a1HCwEUZHc8ukYmqk0PGpRYhQnHJPPerw9RKUX13D-gmjgKM8S9TnqRdEcSjvcWxw-5LFG3zJ1qYRliDworjLJO2jzWUyqQRRclcGw/s839/%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%20(35).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="839" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKvdY9iG1tN25Vo-X7jilcGi_l-DEATjyZB5p5W2-eytGvWR1_Et6KBGJJBv-qs7YrqVXFXzyTvMS9A7H_5x0a1HCwEUZHc8ukYmqk0PGpRYhQnHJPPerw9RKUX13D-gmjgKM8S9TnqRdEcSjvcWxw-5LFG3zJ1qYRliDworjLJO2jzWUyqQRRclcGw/w569-h286/%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%20(35).png" width="569" /></a></div><br /><div>➥左詰めできたことが確認できます。</div><div><br /></div><div><br /></div><div>ちなみに、<a href="https://nlog-project.org/documentation/v4.4.0/html/Fields_T_NLog_LogLevel.htm">公式ドキュメント</a>を確認すると、formatというパラメータもあったので、</div><div>${level:uppercase=true:padding=-5:format=FullName}</div><div>と書くとどうなるか見てみました。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l5vKGo86aHsvEAShz8tHDYLYNYULxVw6zUEEmtBmsFsCQbi0R5wx03gI14mzpyxewpizMpBshSzdMIcphj0DGAYuX8k9AJuoVvNh6piNQ2Yt2QhqzmJAU0f3C3c2vHdLhMG82iAB7iwdP1TVYjfpQDtAA5mGT5KZ6R3A4PHeiGsWf0vQbNWzcE7Wxg/s914/%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%20(37).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="914" height="273" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l5vKGo86aHsvEAShz8tHDYLYNYULxVw6zUEEmtBmsFsCQbi0R5wx03gI14mzpyxewpizMpBshSzdMIcphj0DGAYuX8k9AJuoVvNh6piNQ2Yt2QhqzmJAU0f3C3c2vHdLhMG82iAB7iwdP1TVYjfpQDtAA5mGT5KZ6R3A4PHeiGsWf0vQbNWzcE7Wxg/w588-h273/%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%20(37).png" width="588" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div>➥フルネーム表示にしたので、見た目を整えるにはpadding幅の再設定が必要ですね。</div><div><br /></div><div><br /></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">メッセージとスタックトレース</span></h4><div><br /></div><div>例外の内容を出力する方法は大きく二通りあります。</div><div>①messageのパラメータwithExceptionをtrueにする</div><div>②exceptionレンダラーを使用する</div><div><br /></div><div>①${message:withException=true}</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagcF1WjUA_g2DEna_aXqn5yzsS28HhD3iHuC_XqLAjEHyNBVO7OYInxwlARlgMPG4_nvcNKFrvGZk0N0ziCErVJI4tKLT5fQV3-eDSVB_NmhLcDfLe075LsQ3rrPWO3JuRFbvBNsXEyOpETRxxdHbwblKbiIvZhshXjoGKdabFL3uX0Z1Kn4zT-a-Tg/s842/%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%20(38).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="842" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiagcF1WjUA_g2DEna_aXqn5yzsS28HhD3iHuC_XqLAjEHyNBVO7OYInxwlARlgMPG4_nvcNKFrvGZk0N0ziCErVJI4tKLT5fQV3-eDSVB_NmhLcDfLe075LsQ3rrPWO3JuRFbvBNsXEyOpETRxxdHbwblKbiIvZhshXjoGKdabFL3uX0Z1Kn4zT-a-Tg/w596-h294/%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%20(38).png" width="596" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div>②${message} ${exception}</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-Orv0fKSepk0oPlGT2YxWwAlSwS5rgOZ3eHWsuah8TPCLiqREvbLxE2KS1teVvvS9tUjAoBNaVm3f_bIsh2DFa37IIDSq-1ydjSG8ISXZy3acVspPRi8S9ZpCNG-0fF5hhrvm_ox4w4fRUQKWonn6fA4eofbzt9DcWUGQ8F-vVhsxabas4t87sA_4jA/s846/%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%20(39).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="846" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-Orv0fKSepk0oPlGT2YxWwAlSwS5rgOZ3eHWsuah8TPCLiqREvbLxE2KS1teVvvS9tUjAoBNaVm3f_bIsh2DFa37IIDSq-1ydjSG8ISXZy3acVspPRi8S9ZpCNG-0fF5hhrvm_ox4w4fRUQKWonn6fA4eofbzt9DcWUGQ8F-vVhsxabas4t87sA_4jA/w612-h307/%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%20(39).png" width="612" /></a></div><div><br /></div>➥「❘」で区切られていること以外は同じ内容です。<br /><div> 私は今回${exception}としたところを今まで${exception:format=tostring}と書いていたんですが、結果は変わらないですね...</div><div> 場合によっては違いが出るかもしれないです。</div><div><br /></div><div><br /></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">まとめ</span></h4><div><br /></div><div>ここまで、レイアウトをカスタマイズしながら出力内容を確認してきました。</div><div><br /></div><div>ちなみに、App.configにレイアウトの属性ごと書かないという方法もあります。</div><div>デフォルトの設定は<a href="https://github.com/nlog/nlog/wiki/Tutorial#layouts-and-layoutrenderers">こちら</a>に説明がありますが、出力すると</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigqdsDeTxb9HFn4V2zNhi8q2tq4JaY7fTuqifuVo2P-Cb1cxlx2A6AnJ9Vz1apiAlqYUBz9ZeHbd1vadlPaB3AcvYAzOYyIwVNy30G2yMA5q_1norgJxXI_5OGFJHSTPyp2HoRbwnLcbsbyMU2ZI_McxpVRET4ojA4EVAMdNTsrnETuY5Sv-bX_ZbUNA/s845/%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%20(40).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="845" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigqdsDeTxb9HFn4V2zNhi8q2tq4JaY7fTuqifuVo2P-Cb1cxlx2A6AnJ9Vz1apiAlqYUBz9ZeHbd1vadlPaB3AcvYAzOYyIwVNy30G2yMA5q_1norgJxXI_5OGFJHSTPyp2HoRbwnLcbsbyMU2ZI_McxpVRET4ojA4EVAMdNTsrnETuY5Sv-bX_ZbUNA/w588-h295/%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%20(40).png" width="588" /></a></div><br /><div>こんな感じです。</div><div><br /></div><div>次回はアーカイブとローリングの設定を行っていきます。</div><div>ありがとうございました。</div><div><br /></div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-53878060296618952932023-03-10T09:00:00.001+09:002023-03-10T09:00:00.184+09:00NLogでログを出力する①<p><br /></p><p>こんばんは。せんです。</p><p>今回から、NLogを使ってログ出力する方法をまとめていきます。</p><p>ログ出力と言えば、現在定番なのはこのNLogとlog4netだそうで。</p><p>ゴールはまだまだ先ですが、両者を比較するところまで整理したいなと思っています。</p><p><br /></p><p>NLog編はこんな構成でお届けする予定です。</p><p>① インストール、基本の設定、出力確認(→今回)</p><p>② レイアウトの編集</p><p>③ ローリングとアーカイブ</p><p><br /></p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">はじめに</span></h4><div><br /></div><div>NLogの公式サイトを見てみます。</div><div><span style="font-weight: 400;"><a href="https://nlog-project.org/">https://nlog-project.org/</a><br /></span></div><div><br /></div><div>2006年にv1.0がリリースされており、現在16年半の歴史を持っています。</div><div><br /></div><div>”柔軟で自由度の高い.NET向けオープンソースロギング”となっていて、簡単に導入できるところがポイントのようです。</div><div>.NET Framework3.5-4.8、.NET5-6などをサポートしています。</div><div>(ドキュメントにはないですが2023年3月9日時点で.NET 7もサポートされていました。)</div><div><br /></div><div><br /></div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">さっそく、インストールしてみましょう!!</span></h4><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;">今回は、Visual Studio 2022でコンソールアプリケーションを作ることにしました。</span></div><div>「新しいプロジェクトの作成」を選び、</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG0WrYHg7OuHqaj_1xD4MXs77yvzh2L_74Qo7T8GJ3YQNWhJD7oKaLv7gC3U_xBM2EpfsgXNDaNIO9wq--fnqVHArnr0Af9n6naqbbGabdnuI4CaUBdCFthlvNyniP4gmlU7pJkij2FTHFGAok6qFgAt3_OT7FFCJz5E4-cjNd5xNw2KcvtO-qgl22xw/s1108/%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%20(3).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="761" data-original-width="1108" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG0WrYHg7OuHqaj_1xD4MXs77yvzh2L_74Qo7T8GJ3YQNWhJD7oKaLv7gC3U_xBM2EpfsgXNDaNIO9wq--fnqVHArnr0Af9n6naqbbGabdnuI4CaUBdCFthlvNyniP4gmlU7pJkij2FTHFGAok6qFgAt3_OT7FFCJz5E4-cjNd5xNw2KcvtO-qgl22xw/w599-h412/%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%20(3).png" width="599" /></a></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div>「コンソールアプリ(.NET Framework)」を選んで次に進みます。</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj98wjxLetQLxgzRfNv0RZ88YaB1VXixxhcg904Z8YdkFjI1_00oWDxUdiS-2KimzWMyM2wcRcCJGNgzYnhmDsEhkka8skYnQGZmt5tp6-tW3LxBq0HRMwqjA3kgsLG5vpowxbZNcDQmPYbbLWtLeATwynK6_Uzj00wEdGskBC0pstFOkgNW-62mtciTw/s1046/%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%20(4).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="708" data-original-width="1046" height="407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj98wjxLetQLxgzRfNv0RZ88YaB1VXixxhcg904Z8YdkFjI1_00oWDxUdiS-2KimzWMyM2wcRcCJGNgzYnhmDsEhkka8skYnQGZmt5tp6-tW3LxBq0HRMwqjA3kgsLG5vpowxbZNcDQmPYbbLWtLeATwynK6_Uzj00wEdGskBC0pstFOkgNW-62mtciTw/w601-h407/%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%20(4).png" width="601" /></a></div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;"><br /></span></div><div><span style="font-weight: 400;">プロジェクト名は「UseNLogSample」としました。</span></div><div><span style="font-weight: 400;">フレームワークは最初に「.NET Framework4.7.2」が表示されました。</span></div><div><span style="font-weight: 400;">これはNLogのサポート対象なので、このまま進みます。</span></div><div>「作成」をクリック。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv90EuVLgqB-TjdatZ9w75W8cI3UBuWErkBchkjL8X4MffVE7GQ17SLLBqRgaYbR1iOpZCiMHe2hVwjmgTYbJy63gNv5PnrC8Hu-FZ8fO33dqkkLLwiMBYWnqFGdetM-6-OLpUs_IlmB3P70cdbmgCocnYXaYUqaics77bafSFJeRHq9__64syqOhTRA/s1072/%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%20(5).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="787" data-original-width="1072" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv90EuVLgqB-TjdatZ9w75W8cI3UBuWErkBchkjL8X4MffVE7GQ17SLLBqRgaYbR1iOpZCiMHe2hVwjmgTYbJy63gNv5PnrC8Hu-FZ8fO33dqkkLLwiMBYWnqFGdetM-6-OLpUs_IlmB3P70cdbmgCocnYXaYUqaics77bafSFJeRHq9__64syqOhTRA/w610-h448/%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%20(5).png" width="610" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">プロジェクトが作成されました。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1u5w5K_aw9hVBbpjFRMooq-LFVz1Cu6gc2-jTvSUS6HSF0AOgwz3Y2kBCs3OuoBA8ShpCtqCiDr1GvqmrzqGXQJFlb7MK1cu8AnLvckfKPELGMXrRS9H9ybC-_oIkks9f47vrTst6cbHKviSIqgQd7omvyU1XvtMW3Ej807lthT4D3flvAdFx37DWQ/s1164/%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%20(6).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="1164" height="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ1u5w5K_aw9hVBbpjFRMooq-LFVz1Cu6gc2-jTvSUS6HSF0AOgwz3Y2kBCs3OuoBA8ShpCtqCiDr1GvqmrzqGXQJFlb7MK1cu8AnLvckfKPELGMXrRS9H9ybC-_oIkks9f47vrTst6cbHKviSIqgQd7omvyU1XvtMW3Ej807lthT4D3flvAdFx37DWQ/w636-h490/%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%20(6).png" width="636" /></a></div><br /><div><br /></div><div><br /></div><div>ここから、NLogのパッケージをインストールします。</div>ソリューションエクスプローラでプロジェクト名を右クリックし、<div>「NuGetパッケージの管理」を選択します。<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFLQxaxxkMJFyGGgIu1uqyOR_FifgpgqkhR8wpgX0KFCK2ckuXrNMX92fl4QYStXvP2D1EWXjCuW3KB0rl4vJBqzvpnsf7zgedCjKVBl826DgZT3hECm8uphySZdkXiLM4xDfxgF_RNAKejZ7MMIQgs5s0ejrv1rN_96wphYyGIod3nYTDzKPKuFohwQ/s1317/%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%20(7).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="896" data-original-width="1317" height="433" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFLQxaxxkMJFyGGgIu1uqyOR_FifgpgqkhR8wpgX0KFCK2ckuXrNMX92fl4QYStXvP2D1EWXjCuW3KB0rl4vJBqzvpnsf7zgedCjKVBl826DgZT3hECm8uphySZdkXiLM4xDfxgF_RNAKejZ7MMIQgs5s0ejrv1rN_96wphYyGIod3nYTDzKPKuFohwQ/w635-h433/%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%20(7).png" width="635" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div>こんな感じの画面が表示されます。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZBtGNa0qeDu_0aGAgTul994bjDQEDdzcc5thhmeDWqeXZxlVQGzSuCkzg-voVR-NmsRnd6RHPcYgc5ElAutWQHQnD_MSxC3sPU90aIz_HTx3r2zZuz_qwJ79tS-9iTZu4rlLBqJ9Ncrk8MTkjBDBF7TCtXkb17aOY_QYHUDCA7L1Pj-OabpShbUslPA/s1191/%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%20(8).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1191" height="484" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZBtGNa0qeDu_0aGAgTul994bjDQEDdzcc5thhmeDWqeXZxlVQGzSuCkzg-voVR-NmsRnd6RHPcYgc5ElAutWQHQnD_MSxC3sPU90aIz_HTx3r2zZuz_qwJ79tS-9iTZu4rlLBqJ9Ncrk8MTkjBDBF7TCtXkb17aOY_QYHUDCA7L1Pj-OabpShbUslPA/w638-h484/%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%20(8).png" width="638" /></a></div><br /><div><br /></div><div>左上側の「参照」というところをクリックし、検索ボックスに「NLog」と入力します。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzZnTeaOWQPescAqLL0XDLN9F1a--t75Z-52U0sXsWDnfVZ2hkAsEkBtQ7wTAx0a9bATE_T33ButKwrzhzoJq9_KVNcAUOdY1tdbumcJ5w0g8aU-TAYLDSkL5fjNUZUSLptgldDpkGk2GE4dGNSrY4QXA-i-6KIiT29C6u0ccMcGTGJHqT-U7ZdXLKcA/s1196/%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%20(9).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="903" data-original-width="1196" height="481" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzZnTeaOWQPescAqLL0XDLN9F1a--t75Z-52U0sXsWDnfVZ2hkAsEkBtQ7wTAx0a9bATE_T33ButKwrzhzoJq9_KVNcAUOdY1tdbumcJ5w0g8aU-TAYLDSkL5fjNUZUSLptgldDpkGk2GE4dGNSrY4QXA-i-6KIiT29C6u0ccMcGTGJHqT-U7ZdXLKcA/w636-h481/%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%20(9).png" width="636" /></a></div><div><br /></div><div>一番上に表示されたNLogというパッケージをインストールします。</div><div>ここでサポート情報も確認できます。</div><div><br /></div><div><br /></div><div>バージョンのプルダウンリストを確認すると、これまでのバージョンも選択できるようになっています。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVv2UcM19euUKeQAWpi70GKFWV88QUE-8T7Tx_EaCozsXNDm7Kzjx_8MEtM0xYHFhGc_gnmpKiYy6tRd3sRIS2I9HMr1q1aywCI1KNH1kAyr1ZKjV1neVftVtyPdrQFYbfhYItLIGRCcUAOGRiLCwQxHhqwhHYCjLoLCi5FABXTFxLTIJn08gis4vkdA/s1175/%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%20(11).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="904" data-original-width="1175" height="491" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVv2UcM19euUKeQAWpi70GKFWV88QUE-8T7Tx_EaCozsXNDm7Kzjx_8MEtM0xYHFhGc_gnmpKiYy6tRd3sRIS2I9HMr1q1aywCI1KNH1kAyr1ZKjV1neVftVtyPdrQFYbfhYItLIGRCcUAOGRiLCwQxHhqwhHYCjLoLCi5FABXTFxLTIJn08gis4vkdA/w637-h491/%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%20(11).png" width="637" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div>今回は最新の安定版のまま「インストール」ボタンをクリックします。</div><div><br /></div><div><br /></div><div>以下のような画面が表示されたら、「OK」を選びます。<br /></div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl035zcRP92oPmz4saje5FzisU1WtRbMC60eSxLj9lvq2kGW0jM2--yUQuqCQDUyZ6CNushrMGsKgWKU_NDyAtU-nMiGhnSRYvUPPvfmO4SSRdbGdI-yHUnXKPgmpvqBrBEhhnD0iDPr7KT9HeDiMrwBjX-x3DfjqicdZN4S7c8o9Przf5L9Dwz_EbQ/s1178/%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%20(12).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="1178" height="483" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihl035zcRP92oPmz4saje5FzisU1WtRbMC60eSxLj9lvq2kGW0jM2--yUQuqCQDUyZ6CNushrMGsKgWKU_NDyAtU-nMiGhnSRYvUPPvfmO4SSRdbGdI-yHUnXKPgmpvqBrBEhhnD0iDPr7KT9HeDiMrwBjX-x3DfjqicdZN4S7c8o9Przf5L9Dwz_EbQ/w631-h483/%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%20(12).png" width="631" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div>インストールが終了しました。</div><div>終了したことは出力ウインドウでも確認できます。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPMbMhOcpNKOeGVmS7dga3wzlHJ_ZcLKtEtP1udC1BMsqap1zRUhAiogY_X9hOe_cjJZRTRPKTODRveNG1yYoVfkqeitVVBeVotIyZkuo9KZq97jdW9NtVaLxK4J02ReggJGN0o1IsvzrPqAOMIzwc6qZDRLE5hCNhPTft2RPR0Jq3Ste0CsXbGU3Pzw/s1171/%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%20(13).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="914" data-original-width="1171" height="496" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPMbMhOcpNKOeGVmS7dga3wzlHJ_ZcLKtEtP1udC1BMsqap1zRUhAiogY_X9hOe_cjJZRTRPKTODRveNG1yYoVfkqeitVVBeVotIyZkuo9KZq97jdW9NtVaLxK4J02ReggJGN0o1IsvzrPqAOMIzwc6qZDRLE5hCNhPTft2RPR0Jq3Ste0CsXbGU3Pzw/w636-h496/%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%20(13).png" width="636" /></a></div><br /><div><br /></div><div><br /></div><div><br /></div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">基本の設定を行います</span></h4><div><br /></div><div>続いて、ログ出力設定を編集します。</div><div><br /></div><div>①NLog.configというファイルを新規作成するか</div><div>②App.configを編集するか</div><div>どちらか選びます。</div><div><br /></div><div>①のメリットは、このファイルだけ再利用することができる。</div><div>②のメリットは、ファイル数が増えない。</div><div>という感じでしょうか。</div><div><br /></div><div><br /></div><div>今回は②を選び、App.configを編集します。</div><div>以下リンクは、公式のドキュメントです。</div><div>https://github.com/nlog/NLog/wiki/Configuration-file</div><div><br /></div><div>(編集後)</div><pre class="prettyprint"><span style="font-family: verdana;"><?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target name="logFile"
xsi:type="File"
encoding="UTF-8"
fileName="logs/${processname}.log"
layout="${date} [${level}] -${message}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logFile" />
</rules>
</nlog>
</configuration></span></pre><div><br /></div><div><br /></div><div>これで設定ファイルの編集ができました。</div><div>次にProgram.csを編集します。</div><div><br /></div><div>(編集後)</div><pre class="prettyprint"><span style="font-family: verdana;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;
namespace UseNLogSample
{
public class Program
{
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main(string[] args)
{
logger.Info("NLogでinformationログを出力します。");
logger.Warn("NLogでwarningログを出力します。");
logger.Error("NLogでerrorログを出力します。");
}
}
}</span>
</pre><div><br /></div><div><br /></div><div><br /></div><h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">それではいざ、実行!!</span></h4><div><br /></div><div>プロジェクトをビルドしてUseNLogSample.exeを実行します。</div><div>実行フォルダにlogsフォルダが生成されました。</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw6FeJ1ZPnR6gz7UGhzUnVMx7qnppoVS7IWtthUFkSAOH2fVKPoMKc_lODlQKW4XDKgGYzVmThzrlVreyHMK5rczN6dKbANLjLwMhopMMHEBdQiyUuRi_wmOs2eIpyhfH_300qgevwkoO32tvU9UtBnsWZzUSwa6dMqLAkZ064l7CFJmJ-q1mEO1yt5w/s774/%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%20(21).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="490" data-original-width="774" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw6FeJ1ZPnR6gz7UGhzUnVMx7qnppoVS7IWtthUFkSAOH2fVKPoMKc_lODlQKW4XDKgGYzVmThzrlVreyHMK5rczN6dKbANLjLwMhopMMHEBdQiyUuRi_wmOs2eIpyhfH_300qgevwkoO32tvU9UtBnsWZzUSwa6dMqLAkZ064l7CFJmJ-q1mEO1yt5w/w558-h354/%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%20(21).png" width="558" /></a></div><br /><div><br /></div><div><br /></div><div>さらに、この下にUseNLogSample.logが生成されています。</div><div>ファイルを開くと、以下の通りログが出力されていました!!</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSWMd_eVg8WiTMquYq5lCdVCo849gCUP9YcjQmbaDFaKrkF3iTzKcVcp2SikhqE-IvM6FAvDjBIAnJPr-Dyz--0r9j7QoPjvUj0azkImGwJCM8qm2EHxqXbijmJc5lawzF6yLGghiGnSQ0Nq8z5N64qRjnscUYlESDQIx6As2zGTYVzxS6tcdzc2X4YA/s857/%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%20(24).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="484" data-original-width="857" height="323" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSWMd_eVg8WiTMquYq5lCdVCo849gCUP9YcjQmbaDFaKrkF3iTzKcVcp2SikhqE-IvM6FAvDjBIAnJPr-Dyz--0r9j7QoPjvUj0azkImGwJCM8qm2EHxqXbijmJc5lawzF6yLGghiGnSQ0Nq8z5N64qRjnscUYlESDQIx6As2zGTYVzxS6tcdzc2X4YA/w572-h323/%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%20(24).png" width="572" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">出力レイアウトをかなりシンプルにしたので、メッセージの文頭が揃っていないことに注目です。</div><div class="separator" style="clear: both; text-align: left;">このあたりは次回の内容で詳しく見ていきます。</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div><br /></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;"><span style="font-weight: 400;">まとめ</span></h4><div><br /></div><div>今回は</div><div>・NLogのNuGetパッケージをインストールする</div><div>・App.configとProgram.csを編集する</div><div>・プログラムを実行してログファイルを確認する</div><div>ところまで進みました。</div><div><br /></div><div>この記事を書きながら、App.config</div><div><pre class="prettyprint"><span style="font-family: verdana;"> <configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup></span></pre></div><div><br /></div><div>の部分で、configSectionsとstartupの順番を逆にすると出力できないことを勉強しました。</div><div><br /></div><div>次回は出力レイアウトを編集し、結果を比べていきたいと思います。</div><div><br /></div><div>ご覧いただいてありがとうございました。</div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-73852843905219980202023-02-25T18:30:00.000+09:002023-02-25T18:30:09.114+09:00NASを音楽サーバーにする<p>こんにちは、やっまむーです。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEilqPCAsLcBhpUFKc2Y7zWO7AQzCS0KrngTwdp7fdbUgBKU8ECMOge9uT8C3iwDwCupBtrhfUDsjsdFnQhMONrowRB4sVhs4eX0hrZ-bCwE0e98BIKAmuIXze_Lc2QLGLClmsaZ1az7bY53OTc5F_djclqqmz7atwyLVu17aP5EhhNk-yUX3tBhzI1-" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="518" data-original-width="421" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEilqPCAsLcBhpUFKc2Y7zWO7AQzCS0KrngTwdp7fdbUgBKU8ECMOge9uT8C3iwDwCupBtrhfUDsjsdFnQhMONrowRB4sVhs4eX0hrZ-bCwE0e98BIKAmuIXze_Lc2QLGLClmsaZ1az7bY53OTc5F_djclqqmz7atwyLVu17aP5EhhNk-yUX3tBhzI1-=w325-h400" width="325" /></a></div><p></p><p>近頃は音楽を聴く場合、YoutubeMusic等のサブスクリプションサービスを利用することがほとんどです。<br />ただ、数年前まではレンタルショップで借りたものをリッピングする方が多く、PC内には結構な数の楽曲があります。<br />このまま塩漬けにしておくのも勿体ないので、NASを音楽サーバーにして外出中もこれまで集めた楽曲を聴けるようにしました。</p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">NAS(DS218j)に「Audio Station」をインストールして音楽を管理する</span></span></h4><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">まずはパッケージセンターから「Audio Staion」のインストールをします。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjoZaIL5Q-oj3aU-PffHVJUtQ2r0u6FBPf2mwUA9dGiI0wR4ZP2wGWTe_acqlRXdlNrPsLWgSmNNhmCJdL8HhCSP4OiwKtRGxMEfJV-ptZ1j4EnjeFwU6Y-jFtJm6FDwOeCvrbCdk5MKDS-7NZB5NFq7PyCKG3ILbscrM3b6AEIIP8PMLb95w_FTrCK" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="397" data-original-width="990" height="160" src="https://blogger.googleusercontent.com/img/a/AVvXsEjoZaIL5Q-oj3aU-PffHVJUtQ2r0u6FBPf2mwUA9dGiI0wR4ZP2wGWTe_acqlRXdlNrPsLWgSmNNhmCJdL8HhCSP4OiwKtRGxMEfJV-ptZ1j4EnjeFwU6Y-jFtJm6FDwOeCvrbCdk5MKDS-7NZB5NFq7PyCKG3ILbscrM3b6AEIIP8PMLb95w_FTrCK=w400-h160" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">インストール作業はボタンを押すだけでOKです。
完了すると、メインメニュー内にAudio Staionのアイコンが追加されます。
起動するとこんなかんじで、見た目は普通のオーディオプレーヤーと大きく変わりません。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjMXPrCLsBQAqQ6Y85AC1NeE-F0gkth1rxKzMPnPnQ_PJZmJrueLeQ_wPXsIvIffkdS03kzz-BxrwTWS_DQgn4KwH7Z645I_1WyBGUJYJSHTWdL_9sIfEF5llp8IK8-Qf-iLmKFEEn2Y1sWtevVsZkhIU9ImcudpP0mnngCSiOz-paMZ9vPuvgGJYWX" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="822" data-original-width="1248" height="264" src="https://blogger.googleusercontent.com/img/a/AVvXsEjMXPrCLsBQAqQ6Y85AC1NeE-F0gkth1rxKzMPnPnQ_PJZmJrueLeQ_wPXsIvIffkdS03kzz-BxrwTWS_DQgn4KwH7Z645I_1WyBGUJYJSHTWdL_9sIfEF5llp8IK8-Qf-iLmKFEEn2Y1sWtevVsZkhIU9ImcudpP0mnngCSiOz-paMZ9vPuvgGJYWX=w400-h264" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">楽曲の追加はFile Station(Windowsのエクスプローラー、MacのFinder)から行います。
新しく音楽フォルダができているので、「アップロード」でファイルを追加します。
私は既にNASに音楽を全部アップロードしていたので、従来のフォルダから移動させました。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjsczZCV6DcsX7iebawahI4p66SAUFAXWgkvXD6Y183z2I9RI-OYsFmiymtPRrg_vnSGqSY-TlfFMI6lnF7oEvkSKEwrJfQ_gsmFZnwGGfjoZkEr5LPw2Se7nQPRuvO1sfuQuCvwzhMjM37NGPit4vMzt8ZpHlu7F4OS_StBkMZXZE5Fth36IufO1Zz" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="556" data-original-width="917" height="243" src="https://blogger.googleusercontent.com/img/a/AVvXsEjsczZCV6DcsX7iebawahI4p66SAUFAXWgkvXD6Y183z2I9RI-OYsFmiymtPRrg_vnSGqSY-TlfFMI6lnF7oEvkSKEwrJfQ_gsmFZnwGGfjoZkEr5LPw2Se7nQPRuvO1sfuQuCvwzhMjM37NGPit4vMzt8ZpHlu7F4OS_StBkMZXZE5Fth36IufO1Zz=w400-h243" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">これでAudio Stationが音楽ファイルを認識するようになり、ライブラリが構築されます。<br /></span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi8pntf0zHJ-MBifcxykUxDOpXpsXw031uaInYskMy472sTmSvCStML9BK-fkma2qJAm9xieEhCk2AfOp_J2Pid-BR-8trv5wRA-8QOo1MfCcskk4G-GinbHpaqs7-shxvw84rCDjKomNzdzifhgLPQYU9TjoNaWeoizZyUKphu-OpIl3FrzcYwlUZH" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="668" data-original-width="1065" height="251" src="https://blogger.googleusercontent.com/img/a/AVvXsEi8pntf0zHJ-MBifcxykUxDOpXpsXw031uaInYskMy472sTmSvCStML9BK-fkma2qJAm9xieEhCk2AfOp_J2Pid-BR-8trv5wRA-8QOo1MfCcskk4G-GinbHpaqs7-shxvw84rCDjKomNzdzifhgLPQYU9TjoNaWeoizZyUKphu-OpIl3FrzcYwlUZH=w400-h251" width="400" /></a></span></div><p></p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">「DS Audio」でスマホから音楽を聴く</span></span></h4><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">外出中にNASにある音楽を聴く場合は「DS Audio」アプリを使います。<br /></span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhuoNycdNYKmcIGGzORc6UKKB1TRl8kKkKCndtzOnKI1FfXlRV2McGMzFbgeUs78CId_dTmW9bCyUQ6y6163tawE-7T3l_8_fVQE2YvEXug3E4ItHALnqfvM_F_9HIxG1-uLtcxNCL0dNBAoApb_H7w1cUplIRZcwjG8RZVEq_PI1Rr3ilEt24o95yr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="603" data-original-width="842" height="286" src="https://blogger.googleusercontent.com/img/a/AVvXsEhuoNycdNYKmcIGGzORc6UKKB1TRl8kKkKCndtzOnKI1FfXlRV2McGMzFbgeUs78CId_dTmW9bCyUQ6y6163tawE-7T3l_8_fVQE2YvEXug3E4ItHALnqfvM_F_9HIxG1-uLtcxNCL0dNBAoApb_H7w1cUplIRZcwjG8RZVEq_PI1Rr3ilEt24o95yr=w400-h286" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">また、外部から接続するためQuickConnectを有効にしておくと便利です。
コントロールパネルのQuickConnectで機能を有効にします。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgvMrMwA10-GOuqcWvsi31EOSsNuYm02dkVv4dmtW14pWWMdqw2UJFZCOASoPV6G22w9aqVj-dsQqMeawKezotEawim7Ga4piN5WrPRGhPfJWJPowvDNo54aWL2KqoBKJHik7u9AgMsVsRoI54LAo7XigqkpZT47KDCr7Ka0gBVLMs7ZLieQNiJL-yp" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="625" data-original-width="983" height="254" src="https://blogger.googleusercontent.com/img/a/AVvXsEgvMrMwA10-GOuqcWvsi31EOSsNuYm02dkVv4dmtW14pWWMdqw2UJFZCOASoPV6G22w9aqVj-dsQqMeawKezotEawim7Ga4piN5WrPRGhPfJWJPowvDNo54aWL2KqoBKJHik7u9AgMsVsRoI54LAo7XigqkpZT47KDCr7Ka0gBVLMs7ZLieQNiJL-yp=w400-h254" width="400" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">DS Audioを起動すると、サインイン画面が表示されます。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgUV7SiHBhvE809y9TVhxiqkBkKkpu4MkcrCEWeNcxIu0ulPKOvCvobmzgkle142-4JeQ_KCtgJxAs101J3dXwBmd2C3gNsCCViPud0D8iNW_t9oEEKRIj_UzO_iGPPhLAufdYsfIVW2ReJyK8gowTgPTsQeczF_nX-izDvTPIlLpkfKkjppVk9j6_R" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="947" data-original-width="868" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEgUV7SiHBhvE809y9TVhxiqkBkKkpu4MkcrCEWeNcxIu0ulPKOvCvobmzgkle142-4JeQ_KCtgJxAs101J3dXwBmd2C3gNsCCViPud0D8iNW_t9oEEKRIj_UzO_iGPPhLAufdYsfIVW2ReJyK8gowTgPTsQeczF_nX-izDvTPIlLpkfKkjppVk9j6_R=w367-h400" width="367" /></a></span></div></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">先ほど有効にしたQuickConnectのID、ログインに使用するユーザーのアカウント名とパスワードを入力してサインインボタンを押します。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhG82cBCft4c465DUy740G34I9sNOMIIWe4Ck0cAoZ_weD-tUory06h1Kbsj7Yln-4EWIE6cseakZvCXKKwKyknBw886F1qR_NfIPwmsQGDPYNJ-0wQgwzQPcG5ChDXfa4ITxGDN1NaWaEeHtzQAoYr5kj5_Unu_C6ctDchOLPoR4QEdRfa3owTSdQM" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1931" data-original-width="869" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhG82cBCft4c465DUy740G34I9sNOMIIWe4Ck0cAoZ_weD-tUory06h1Kbsj7Yln-4EWIE6cseakZvCXKKwKyknBw886F1qR_NfIPwmsQGDPYNJ-0wQgwzQPcG5ChDXfa4ITxGDN1NaWaEeHtzQAoYr5kj5_Unu_C6ctDchOLPoR4QEdRfa3owTSdQM=w288-h640" width="288" /></a></span></div><p></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">Audio Stationのライブラリと同じものが表示されます。
初回はデータの同期に時間がかかりましたが、以降は多少の読み込み時間こそあれどそれなりの速度で表示されます。</span></span></p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">「DS Audio」を実際に使ってみて</span></span></h4><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">これまで集めた楽曲がどこでも利用できるのはやはり便利です。
以前は大容量のSDカードに入れて聴いていましたが、最近のスマホはSDカードが無いタイプも出てきており、全てのデータを持ち歩くことが難しくなりました。
その点が克服できたので個人的にとてもよかったです。</span></span></p><p style="text-align: left;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">難点を上げるとすれば、曲の再生開始に時間がかかる点が気になりました。
曲のデータをある程度(おそらく再生時間の20%程度?)取得するまでは再生が始まらないので曲を試し聴きしながら探す際にストレスを感じます。
また、曲送りをした時も同じ挙動をします。
曲の終端までいって曲が変わる時は発生しないので、流し聴きする分には問題ありません。</span></span></p><p style="text-align: left;">まとめると、</p><p style="text-align: left;"></p><ul style="text-align: left;"><li>音楽データが大量にあり、持ち運びが難しい</li><li>プレイリストやアルバム・アーティスト単位で流し聴きする</li></ul><p></p><p style="text-align: left;">といった方に向いていると思います。<br />NASを運用されている方は一度試してみてはいかがでしょうか。</p><p style="text-align: left;">ではではー。</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-46772868531654216002023-02-11T00:02:00.000+09:002023-02-11T00:02:01.830+09:00GAS(Google Apps Script)でYouTubeのデータ取得②<p>こんばんは。ざわです。</p><p><a href="https://aimek-developer.blogspot.com/2023/01/gasgoogle-apps-scriptyoutube.html" target="_blank">前回</a>、GAS(Google Apps Script)を使って YouTube の動画情報を取得してみました。</p><p>この時は特定の動画のURLを指定して取得する方法で、1件分だけの取得だったのですが、</p><p>今回はそれを改良し、特定のチャンネルから複数の動画情報を取得してスプレッドシートに一覧出力してみようと思います。</p><p>動画情報を取得するチャンネルは、弊社の「<a href="https://www.youtube.com/channel/UCmatd8FfLKg0Pmi4iitAJYg" target="_blank">AIMEKチャンネル</a>」です。</p><p>最初にチャンネルIDが必要なのですが、チャンネルIDはURLの末尾部分から取得できます。</p><div style="text-align: left;">AIMEKチャンネルの場合、URLは下記で、URL末尾の青字部分がチャンネルIDに該当します。<br /> https://www.youtube.com/channel/<span style="color: #2b00fe;">UCmatd8FfLKg0Pmi4iitAJYg</span></div><div style="text-align: left;"><br /></div><div style="text-align: left;">YouTube Data APIの以下リソースを使用して実装してみました。<br /> ・Channels<br /> ・PlaylistItems<br /> ・Videos</div><p>できあがったソースがこちら。</p><div style="background-color: #fdf6e3; color: #657b83; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div><span style="color: #586e75; font-weight: bold;">function</span> <span style="color: #268bd2;">myFunction</span>() {</div><div> <span style="color: #93a1a1; font-style: italic;">// チャンネルID</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">channelId</span> <span style="color: #859900;">=</span> <span style="color: #2aa198;">"UCmatd8FfLKg0Pmi4iitAJYg"</span></div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// ビデオID 取得</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">videoIds</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">getVideoIds</span>(<span style="color: #268bd2;">channelId</span>)</div><div> <span style="color: #859900;">if</span> (<span style="color: #859900;">!</span><span style="color: #268bd2;">videoIds</span> <span style="color: #859900;">||</span> <span style="color: #268bd2;">videoIds</span>.length <span style="color: #859900;">===</span> <span style="color: #d33682;">0</span>) {</div><div> <span style="color: #268bd2;">console</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'No VideoId found.'</span>);</div><div> <span style="color: #859900;">return</span>;</div><div> }</div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// スプレッドシートにヘッダ行をセット</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">sheet</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">SpreadsheetApp</span>.<span style="color: #268bd2;">getActiveSheet</span>();</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">1</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"タイトル"</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">2</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"再生回数"</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">3</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"いいね数"</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">4</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"コメント数"</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">5</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"投稿日時"</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #d33682;">1</span>, <span style="color: #d33682;">6</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #2aa198;">"概要"</span>);</div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// 動画情報を取得し、取得値をスプレッドシートに出力</span></div><div> <span style="color: #859900;">for</span> (<span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">i</span> <span style="color: #859900;">=</span> <span style="color: #d33682;">0</span>; <span style="color: #268bd2;">i</span> <span style="color: #859900;"><</span> <span style="color: #268bd2;">videoIds</span>.<span style="color: #268bd2;">length</span>; <span style="color: #268bd2;">i</span><span style="color: #859900;">++</span>) {</div><div> <span style="color: #586e75; font-weight: bold;">const</span> {</div><div> <span style="color: #268bd2;">title</span>,</div><div> <span style="color: #268bd2;">publishedAt</span>,</div><div> <span style="color: #268bd2;">description</span>,</div><div> <span style="color: #268bd2;">viewCount</span>,</div><div> <span style="color: #268bd2;">likeCount</span>,</div><div> <span style="color: #268bd2;">commentCount</span></div><div> } <span style="color: #859900;">=</span> <span style="color: #268bd2;">getVideoData</span>(<span style="color: #268bd2;">videoIds</span>[<span style="color: #268bd2;">i</span>])</div><div> </div><div> <span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">row</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">i</span> <span style="color: #859900;">+</span> <span style="color: #d33682;">2</span>;</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">1</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">title</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">2</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">viewCount</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">3</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">likeCount</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">4</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">commentCount</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">5</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">publishedAt</span>);</div><div> <span style="color: #268bd2;">sheet</span>.<span style="color: #268bd2;">getRange</span>(<span style="color: #268bd2;">row</span>, <span style="color: #d33682;">6</span>).<span style="color: #268bd2;">setValue</span>(<span style="color: #268bd2;">description</span>);</div><div> }</div><div>}</div><br /><div><span style="color: #586e75; font-weight: bold;">function</span> <span style="color: #268bd2;">getVideoIds</span>(channelId) {</div><div> <span style="color: #859900;">try</span> {</div><div> <span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">results</span> <span style="color: #859900;">=</span> [];</div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// チャンネルIDを指定して、channelリソースを取得</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">lstChannels</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">YouTube</span>.<span style="color: #268bd2;">Channels</span>.<span style="color: #268bd2;">list</span>(<span style="color: #2aa198;">"contentDetails"</span>, {<span style="color: #268bd2;">id</span>: <span style="color: #268bd2;">channelId</span>});</div><div> <span style="color: #859900;">if</span> (<span style="color: #859900;">!</span><span style="color: #268bd2;">lstChannels</span> <span style="color: #859900;">||</span> <span style="color: #268bd2;">lstChannels</span>.<span style="color: #268bd2;">items</span>.length <span style="color: #859900;">===</span> <span style="color: #d33682;">0</span>) {</div><div> <span style="color: #268bd2;">console</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'No Channels found.'</span>);</div><div> <span style="color: #859900;">return</span>;</div><div> }</div><div> </div><div> <span style="color: #859900;">for</span> (<span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">i</span> <span style="color: #859900;">=</span> <span style="color: #d33682;">0</span>; <span style="color: #268bd2;">i</span> <span style="color: #859900;"><</span> <span style="color: #268bd2;">lstChannels</span>.<span style="color: #268bd2;">items</span>.length; <span style="color: #268bd2;">i</span><span style="color: #859900;">++</span>) {</div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// チャンネルのアップロード済み動画を含む再生リストIDを取得</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">item</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">lstChannels</span>.<span style="color: #268bd2;">items</span>[<span style="color: #268bd2;">i</span>];</div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">playlistId</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">item</span>.<span style="color: #268bd2;">contentDetails</span>.<span style="color: #268bd2;">relatedPlaylists</span>.<span style="color: #268bd2;">uploads</span>;</div><div> </div><div> <span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">nextPageToken</span> <span style="color: #859900;">=</span> <span style="color: #b58900;">null</span>;</div><div> <span style="color: #859900;">do</span> {</div><div> <span style="color: #93a1a1; font-style: italic;">// 再生リストIDを指定して、playlistItems.list メソッドを使って対応するリストを取得</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">playlistResponse</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">YouTube</span>.<span style="color: #268bd2;">PlaylistItems</span>.<span style="color: #268bd2;">list</span>(<span style="color: #2aa198;">'snippet'</span>, {</div><div> <span style="color: #268bd2;">playlistId</span>: <span style="color: #268bd2;">playlistId</span>,</div><div> <span style="color: #268bd2;">maxResults</span>: <span style="color: #d33682;">50</span>,</div><div> <span style="color: #268bd2;">pageToken</span>: <span style="color: #268bd2;">nextPageToken</span></div><div> });</div><div> <span style="color: #859900;">if</span> (<span style="color: #859900;">!</span><span style="color: #268bd2;">playlistResponse</span> <span style="color: #859900;">||</span> <span style="color: #268bd2;">playlistResponse</span>.<span style="color: #268bd2;">items</span>.length <span style="color: #859900;">===</span> <span style="color: #d33682;">0</span>) {</div><div> <span style="color: #268bd2;">console</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'No Playlist found.'</span>);</div><div> <span style="color: #859900;">break</span>;</div><div> }</div><div> </div><div> <span style="color: #93a1a1; font-style: italic;">// ビデオID 取得</span></div><div> <span style="color: #859900;">for</span> (<span style="color: #586e75; font-weight: bold;">let</span> <span style="color: #268bd2;">j</span> <span style="color: #859900;">=</span> <span style="color: #d33682;">0</span>; <span style="color: #268bd2;">j</span> <span style="color: #859900;"><</span> <span style="color: #268bd2;">playlistResponse</span>.<span style="color: #268bd2;">items</span>.length; <span style="color: #268bd2;">j</span><span style="color: #859900;">++</span>) {</div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">playlistItem</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">playlistResponse</span>.<span style="color: #268bd2;">items</span>[<span style="color: #268bd2;">j</span>];</div><div> <span style="color: #268bd2;">results</span>.<span style="color: #268bd2;">push</span>(<span style="color: #268bd2;">playlistItem</span>.<span style="color: #268bd2;">snippet</span>.<span style="color: #268bd2;">resourceId</span>.<span style="color: #268bd2;">videoId</span>);</div><div> } </div><div> <span style="color: #268bd2;">nextPageToken</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">playlistResponse</span>.<span style="color: #268bd2;">nextPageToken</span>;</div><div> } <span style="color: #859900;">while</span> (<span style="color: #268bd2;">nextPageToken</span>);</div><div> }</div><div> <span style="color: #859900;">return</span> <span style="color: #268bd2;">results</span>;</div><div> </div><div> } <span style="color: #859900;">catch</span> (<span style="color: #268bd2;">err</span>) {</div><div> <span style="color: #268bd2;">console</span>.<span style="color: #268bd2;">log</span>(<span style="color: #2aa198;">'Failed with err %s'</span>, <span style="color: #268bd2;">err</span>.<span style="color: #268bd2;">message</span>);</div><div> }</div><div>}</div><br /><div><span style="color: #586e75; font-weight: bold;">function</span> <span style="color: #268bd2;">getVideoData</span>(videoId) {</div><div> <span style="color: #93a1a1; font-style: italic;">// ビデオIDを指定して、動画情報を取得</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> <span style="color: #268bd2;">results</span> <span style="color: #859900;">=</span> <span style="color: #268bd2;">YouTube</span>.<span style="color: #268bd2;">Videos</span>.<span style="color: #268bd2;">list</span>(<span style="color: #2aa198;">'snippet,statistics'</span>, { <span style="color: #268bd2;">id</span>: <span style="color: #268bd2;">videoId</span> });</div><div> <span style="color: #586e75; font-weight: bold;">const</span> { <span style="color: #268bd2;">items</span> } <span style="color: #859900;">=</span> <span style="color: #268bd2;">results</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> { <span style="color: #268bd2;">statistics</span>, <span style="color: #268bd2;">snippet</span> } <span style="color: #859900;">=</span> <span style="color: #268bd2;">items</span>[<span style="color: #d33682;">0</span>]</div><div> <span style="color: #586e75; font-weight: bold;">const</span> { <span style="color: #268bd2;">title</span>, <span style="color: #268bd2;">publishedAt</span>, <span style="color: #268bd2;">description</span> } <span style="color: #859900;">=</span> <span style="color: #268bd2;">snippet</span></div><div> <span style="color: #586e75; font-weight: bold;">const</span> { <span style="color: #268bd2;">viewCount</span>, <span style="color: #268bd2;">likeCount</span>, <span style="color: #268bd2;">commentCount</span> } <span style="color: #859900;">=</span> <span style="color: #268bd2;">statistics</span></div><div> </div><div> <span style="color: #859900;">return</span> { <span style="color: #268bd2;">title</span>, <span style="color: #268bd2;">publishedAt</span>, <span style="color: #268bd2;">description</span>, <span style="color: #268bd2;">viewCount</span>, <span style="color: #268bd2;">likeCount</span>, <span style="color: #268bd2;">commentCount</span> }</div><div>}</div></div><p><br /></p><p>実行結果の一覧がこちらになります。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYoweUXMLEnnn7tO4qc4nvnY0Lz64V_AoM_oG5_f7onjpLlGJQr0uR-VIjfVw8CiaxEddiT32k3bVIq1S2Nl9qqfpkcXsTzGBY2I1kQrkb4NmIuAxD-qi6ddHhmWmU-BWLjSGN4KgVzXez1z4TxCV0E1aK54M987b2eI6N6n8yFgspCMP050Sshqx4uw/s1767/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="716" data-original-width="1767" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYoweUXMLEnnn7tO4qc4nvnY0Lz64V_AoM_oG5_f7onjpLlGJQr0uR-VIjfVw8CiaxEddiT32k3bVIq1S2Nl9qqfpkcXsTzGBY2I1kQrkb4NmIuAxD-qi6ddHhmWmU-BWLjSGN4KgVzXez1z4TxCV0E1aK54M987b2eI6N6n8yFgspCMP050Sshqx4uw/w640-h261/01.png" width="640" /></a></div><br /><p>YouTube Data APIの<a href="https://developers.google.com/apps-script/advanced/youtube" target="_blank">サンプルコード</a>を参考に作りました。比較的簡単にできたなぁという感想です。</p><p>それではまたー。</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-50386354728095415082023-01-27T08:00:00.017+09:002023-01-29T18:49:11.214+09:00最近話題のChatGPTを触ってみた<style type="text/css">
.keyboard-key{background-color:#f9f9f9;background-image:-moz-linear-gradient(center top,#eee,#f9f9f9,#eee);border:1px solid #888;border-radius:2px;box-shadow:1px 2px 2px #ddd;font-family:inherit;font-size:.85em;padding:1px 3px}
table, td, th{ border: 1px solid black; }
</style>
<p> </p>
<p>どうも。ひっくです。</p>
<p>ChatGPTという人工知能のサービスが最近話題を集めています。</p>
<p>興味を惹かれたので、私もChatGPTを試してみました。その感想を今回は書こうと思います。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT6ixME8qi7boMGaydPjT-4qRVgTlECLsY5OTpD1HQ1ihh4fW0if9qWJTkPbpOs22ieZf5g2br2fBCzt14X97DK9O9ivrA1t3OepKucwPcluElNNt5fsEDtpQADWrIJQ78KLwImIs2PQrW1Vm2Vw8AlvvslUhb6gNFLLYBbuUb96vZR7pGaXvsdHDDfg/s1600/andrea-de-santis-zwd435-ewb4-unsplash.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT6ixME8qi7boMGaydPjT-4qRVgTlECLsY5OTpD1HQ1ihh4fW0if9qWJTkPbpOs22ieZf5g2br2fBCzt14X97DK9O9ivrA1t3OepKucwPcluElNNt5fsEDtpQADWrIJQ78KLwImIs2PQrW1Vm2Vw8AlvvslUhb6gNFLLYBbuUb96vZR7pGaXvsdHDDfg/s1600/andrea-de-santis-zwd435-ewb4-unsplash.jpg" width="600"></a></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">ChatGPTとは</span></h4><br>
<p>ChatGPTとは、米国のOpenAIが開発した対話式言語システムを採用するAIです。</p>
<p>2022年11月に公開され、わずか1週間も経たないうちに登録ユーザー数がなんと100万人を突破したそうです。</p>
<p>以下のようなことができるとされています。</p>
<ul>
<li>対人のような会話</li>
<li>Excelマクロの生成やプログラムコードの生成</li>
<li>文章(小説や脚本等)の生成</li>
</ul>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">ChatGPTを使用する</span></h4><br>
<ol>
<li><p>ユーザー登録する</p>
<p><a href='https://chat.openai.com/auth/login'>こちら</a>から登録します。(電話認証あり)</p>
<p> </p>
</li>
<li><p>チャット入力欄で質問を記載します。</p>
<p>日本語に対応しているため、入力は日本語でOKです。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij2NJxKEUS0wN9J4Ag-sYM961pisFFA6wXzkHaAlck1iAQto8ZGou93x6pMAxqwrQ5B086riGJUS7r1LAWOSHsiE9kOqAByiJ0n0RMmOIk97bUkhRJ2d4hdFwbl8vSGf8-gMNheHsZTksDeSTeY-_c5n0f8IZJYFuy4G3c41w0NtG0j3bmv1G1FUF4fw/s1600/image-20230129155315389.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij2NJxKEUS0wN9J4Ag-sYM961pisFFA6wXzkHaAlck1iAQto8ZGou93x6pMAxqwrQ5B086riGJUS7r1LAWOSHsiE9kOqAByiJ0n0RMmOIk97bUkhRJ2d4hdFwbl8vSGf8-gMNheHsZTksDeSTeY-_c5n0f8IZJYFuy4G3c41w0NtG0j3bmv1G1FUF4fw/s1600/image-20230129155315389.png" width="650"></a></div>
<p>実際に使用してみた動画が以下になります。</p>
<p>途中フリーズしたので、再実行しています。(再実行時に回答が変わる点にも注目してください。)</p>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='640' height='320' src='https://www.blogger.com/video.g?token=AD6v5dxgCP7sRX66dksgnKeoLQJu_Ni0dq68tMgqV9Btke5__fawS0k90tG4kNExKzdTwcdoBYWVJJV9ZYk90EaroA' class='b-hbp-video b-uploaded' frameborder='0'></iframe>
</div>
<p> </p>
</li>
</ol>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">使用してみた感想、まとめ</span></h4><br>
<p>会話がかなり自然にできるということには率直に驚きました。</p>
<p>回答が長文傾向にありますが、「簡潔にしてみて」というと要約して短くしてくれます。</p>
<p>文の添削用途にも活用できそうです。</p>
<p> </p>
<p>とはいえ、ChatGPTからの回答は正しくない、適切でないことも多くあるというのが使ってみての感想です。</p>
<p>強化学習によりユーザーとの対話の中で適切に修正されていくこともありますが、ユーザーが誤った情報を</p>
<p>正しいと教えてしまった場合には、応答結果が誤ったものとなる可能性は常にあります。</p>
<p><strong>ファクトチェックは欠かせない</strong>、ということに気を付けましょう。(自分の専門範囲外の内容は特に)</p>
<p> </p>
<p>興味を持った方は実際に使ってみてください。</p>
<p>今回はこのへんで。ではまた!</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-44834869061214596322023-01-22T15:55:00.000+09:002023-01-22T15:55:13.914+09:00腰痛とデスクチェアの寿命<p> こんにちは、やっまむーです。</p><p>先週の頭から腰痛が続いて日々の生活がつらいです。<br />仕事中もたびたび痛みを感じて、集中しにくい状況です。<br />姿勢の悪さが原因だと思いますが、こんなにつらいとは思いませんでした。</p><h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); color: #444444; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">デスクチェアにも寿命</span></span></h4><p>最初は自宅のデスクから立ち上がった際に尾てい骨付近に痛みを感じました。<br />その後、徐々に腰や背中、太ももの方まで痛みだしました。<br />背中や太ももは、痛みをカバーするために変に力が入っているのかなと推測。<br />そして数日すごして気づいたのが、職場よりも自宅のデスクチェアの方が座っているのが辛いことがわかりました。<br /></p><p>調べてみると理由に納得。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgShuI-MNOBvN6afUoJAQGZ9AGtBLN0f7Vb1kRAW-g05oCBNaB-c0Q8hiZT1hDzWWamHnfOBvmTmqakRfSA6qVFXyzVkuWUF2ltJPFOzn2ZWDFUoDaRfYL6-hIqYzKopAxc1DAUmQFrINz0YO8w4_JjeoLF6DZvZZIQYjviWtxGKbxM8QRpmnfF2N3q" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="3131" data-original-width="3072" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEgShuI-MNOBvN6afUoJAQGZ9AGtBLN0f7Vb1kRAW-g05oCBNaB-c0Q8hiZT1hDzWWamHnfOBvmTmqakRfSA6qVFXyzVkuWUF2ltJPFOzn2ZWDFUoDaRfYL6-hIqYzKopAxc1DAUmQFrINz0YO8w4_JjeoLF6DZvZZIQYjviWtxGKbxM8QRpmnfF2N3q=w392-h400" width="392" /></a></div><p style="text-align: left;">触っている場所が丁度普段座っている部分ですが、クッション性がほとんどありません。<br />体重で中のウレタンフォームが完全にへたっています。<br />更に一部には突起物の感触があります。<br /></p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjX4ucAqhxzAvlUCFgGcZexWukIsQh3kOwV_AnaMAmLIsSlICeSMV65pwAOguVvHV453hv8gjPwdxwLiZJ2t4O8QmiCX2r7q0p5sby-a9M5_uMdh1BdgP_kAY3b8x9U6f4yh_0Wl09al0VUPcBnfHuDCtJy-9drTh77cbExP138zyXZZ-eqNka3EePc" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="2899" data-original-width="3072" height="377" src="https://blogger.googleusercontent.com/img/a/AVvXsEjX4ucAqhxzAvlUCFgGcZexWukIsQh3kOwV_AnaMAmLIsSlICeSMV65pwAOguVvHV453hv8gjPwdxwLiZJ2t4O8QmiCX2r7q0p5sby-a9M5_uMdh1BdgP_kAY3b8x9U6f4yh_0Wl09al0VUPcBnfHuDCtJy-9drTh77cbExP138zyXZZ-eqNka3EePc=w400-h377" width="400" /></a></div><p></p><p style="text-align: left;">座面の板と、隙間からネジが飛び出ていました。<br />ネジが刺さることはありませんが、クッション性がなくなった座面では触るとうっすら感触があります。<br />板の上に座っているような状況になっており、これで姿勢悪く座れば具合が悪くなるのも納得です。</p><p style="text-align: left;">購入から4年、そのうち1年はテレワークで毎日8時間以上座っていました。<br />外観は目立った劣化はありませんが、座面がこのような状態では長時間座ることはしんどいので買い替える事にしました。<br />今使用しているゲーミングチェアは価格だけで決めたので、次は座面の質などもじっくり検討しようと思います。</p><p style="text-align: left;">皆さんも腰をお大事に。<br />ではではー。</p><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-3606958083205536672023-01-15T23:30:00.000+09:002023-01-16T01:47:36.310+09:00GAS(Google Apps Script)でYouTubeのデータ取得<p>こんばんは。ざわです。</p><p>今回はGAS(Google Apps Script)を使って YouTube のデータ取得をしてみようと思います。</p><p><br /></p><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: normal;">作業の流れ</span></h4><p></p><ol style="text-align: left;"><li>GASのプロジェクト作成</li><li>プロジェクトにYouTube Data API のサービス追加</li><li>YouTube Data API を利用して個別動画の情報を取得</li></ol><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: normal;">GASのプロジェクト作成</span></h4><p></p></div><div><div style="text-align: left;"> GASを使うのは今回が初めてなので、プロジェクトの作成方法から書いていこうと思います。</div></div><div style="text-align: left;"> YouTubeから取得したデータは最終的にGoogleスプレッドシートに表示しますので、</div><div style="text-align: left;"> GoogleスプレッドシートにGASを紐づけて使用する方法(コンテナバインド型)で作成していきます。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"> 1.Chromeで自身のGoogleアカウントでログインし、Googleドライブを開く。</div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhwntNx8IEnCQlBG0AJN3pbc3VfWH83DFrBZTtRCaZIsBtoH7RbLRUUwb7e_JdUxCSaZ7guids2KqYGhqOpSSPCnPls8SBHFpUax35-iRTLmGriH7-HvIq6w8hlPgW_Aqm1YYEJ4XEyTI8X7x-R6264SQDFKs4tw8xePDGkloqWL9G-wVHJvvb-qxc9w/s351/01.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="351" data-original-width="326" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhwntNx8IEnCQlBG0AJN3pbc3VfWH83DFrBZTtRCaZIsBtoH7RbLRUUwb7e_JdUxCSaZ7guids2KqYGhqOpSSPCnPls8SBHFpUax35-iRTLmGriH7-HvIq6w8hlPgW_Aqm1YYEJ4XEyTI8X7x-R6264SQDFKs4tw8xePDGkloqWL9G-wVHJvvb-qxc9w/w186-h200/01.png" width="186" /></a></div><br /></blockquote><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: left;"> 2.マイドライブで右クリックし、[Googleスプレッドシート]>[空白のスプレッドシート]を選択。</div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgawyQ8idFhQccTQB0DsLysivr9x9BZD7EiAoFRJLHg1ybQSmJjaxodliJGvU4ypRmSpqyTNvFVeYwbTU3KewwyMmlB_J8wUNxcymttr9aiOp5N60-TU_D_Z5uuB2RM7aI41wDSFoxxoDzHim6u97NlqaOhfpSys1DH7dGZZTPJbM8YpLXMQwSViXkW0A/s840/02.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="840" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgawyQ8idFhQccTQB0DsLysivr9x9BZD7EiAoFRJLHg1ybQSmJjaxodliJGvU4ypRmSpqyTNvFVeYwbTU3KewwyMmlB_J8wUNxcymttr9aiOp5N60-TU_D_Z5uuB2RM7aI41wDSFoxxoDzHim6u97NlqaOhfpSys1DH7dGZZTPJbM8YpLXMQwSViXkW0A/w400-h226/02.png" width="400" /></a></div><br /><div style="text-align: left;"><br /></div></blockquote><div style="text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div style="text-align: left;"> 3.スプレッドシートで[拡張機能]>[Apps Script]を選択し、GASの画面を表示する。</div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbXn66Vp-QdqZ23oD4sBb_Ah4zUhKAW04h5m-i1UJT3QY9_-U4OG0IF1w37ZFuKdG8sOM03jNTBl10Ye7Jo_4bi_BvkQDM_ppAqF5R7tM_afB3GkgP2b1Fg91raW-vTI4gzp6UD1_QWHWlCl8EKYj_0p7e1c2HA_ECXuZ6HT7HrJVMePjIoPJEEDucA/s784/03.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="784" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbXn66Vp-QdqZ23oD4sBb_Ah4zUhKAW04h5m-i1UJT3QY9_-U4OG0IF1w37ZFuKdG8sOM03jNTBl10Ye7Jo_4bi_BvkQDM_ppAqF5R7tM_afB3GkgP2b1Fg91raW-vTI4gzp6UD1_QWHWlCl8EKYj_0p7e1c2HA_ECXuZ6HT7HrJVMePjIoPJEEDucA/w400-h122/03.png" width="400" /></a></div><br /><div style="text-align: left;"><br /></div></blockquote><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><br /></div></blockquote><div style="text-align: left;"><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: normal;">プロジェクトにYouTube Data API のサービス追加</span></h4><p></p></div><div> 1.サービスの「+」ボタンをクリックし、「YouTube Data API v3」を選択してサービスを追加する。</div></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9iDEeHwRf3EM6QD-8ONLH-ODagFpl-Id-c1t3ofeias-unilersAqw1adY6QxX7SFQjVzHK-6LaqMX6FxH-j0o_TXMTsSxORy1PM6swxcPGWEm-jWZP1CLJNBFpn1JMpZQlO32ddeeV4ZGH0GmnON7pNncwNtAFVJJiigEfF0_CtC7s2lXAC82aXfHw/s848/05.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="543" data-original-width="848" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9iDEeHwRf3EM6QD-8ONLH-ODagFpl-Id-c1t3ofeias-unilersAqw1adY6QxX7SFQjVzHK-6LaqMX6FxH-j0o_TXMTsSxORy1PM6swxcPGWEm-jWZP1CLJNBFpn1JMpZQlO32ddeeV4ZGH0GmnON7pNncwNtAFVJJiigEfF0_CtC7s2lXAC82aXfHw/w400-h256/05.png" width="400" /></a></div><br /><div style="text-align: left;"><br /></div></div></blockquote><div style="text-align: left;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div><div><h4 style="border-bottom: 2px solid rgb(255, 153, 102); border-left: 10px solid rgb(255, 153, 102); padding: 10px;"><span style="font-weight: 400;">YouTube Data API を利用して個別動画の情報を取得</span></h4><p></p></div><div> ・今回は弊社の AIMEKチャンネルの「<a href="https://www.youtube.com/watch?v=UdNCHGaWcb4" target="_blank">特急「しまかぜ」個室で行く伊勢志摩【社員旅行2022】</a>」の動画情報を取得してみます。</div></div><div> ・個別動画の情報を取得するので Videos リソースを使用します。</div><div> ・取得する情報は以下とします。取得情報のプロパティは<a href="https://developers.google.com/youtube/v3/docs/videos?hl=ja#resource" target="_blank">APIリファレンス</a>を参考に。</div><div><div> ・タイトル</div><div> ・再生回数</div><div> ・いいね数</div><div> ・コメント数</div><div> ・投稿日時</div><div> ・概要</div></div><div><br /></div><div><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div style="line-height: 19px;"><div><span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">myFunction</span>() {</div><div> <span style="color: #6a9955;">// 動画のURL</span></div><div> <span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">url</span> = <span style="color: #ce9178;">"https://www.youtube.com/watch?v=UdNCHGaWcb4"</span></div><br /><div> <span style="color: #569cd6;">const</span> <span style="color: #4fc1ff;">sheet</span> = <span style="color: #9cdcfe;">SpreadsheetApp</span>.<span style="color: #dcdcaa;">getActiveSheet</span>();</div><div> </div><div> <span style="color: #6a9955;">// スプレッドシートにヘッダ行をセット</span></div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">1</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"タイトル"</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">2</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"再生回数"</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">3</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"いいね数"</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">4</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"コメント数"</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">5</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"投稿日時"</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">6</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #ce9178;">"概要"</span>);</div><br /><div> <span style="color: #6a9955;">// 情報取得</span></div><div> <span style="color: #569cd6;">const</span> {</div><div> <span style="color: #4fc1ff;">title</span>,</div><div> <span style="color: #4fc1ff;">publishedAt</span>,</div><div> <span style="color: #4fc1ff;">description</span>,</div><div> <span style="color: #4fc1ff;">viewCount</span>,</div><div> <span style="color: #4fc1ff;">likeCount</span>,</div><div> <span style="color: #4fc1ff;">commentCount</span></div><div> } = <span style="color: #dcdcaa;">getVideoData</span>(<span style="color: #9cdcfe;">url</span>)</div><br /><div> <span style="color: #6a9955;">// 取得値をスプレッドシートに出力</span></div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">1</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">title</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">2</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">viewCount</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">3</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">likeCount</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">4</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">commentCount</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">5</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">publishedAt</span>);</div><div> <span style="color: #9cdcfe;">sheet</span>.<span style="color: #dcdcaa;">getRange</span>(<span style="color: #b5cea8;">2</span>, <span style="color: #b5cea8;">6</span>).<span style="color: #dcdcaa;">setValue</span>(<span style="color: #9cdcfe;">description</span>);</div><div>}</div><br /><div><span style="color: #569cd6;">function</span> <span style="color: #dcdcaa;">getVideoData</span>(<span style="color: #9cdcfe;">url</span>) {</div><div><span style="color: #6a9955;"> // URLからビデオIDを取得</span></div><div><span style="color: #569cd6;"> const</span> <span style="color: #4fc1ff;">urlArray</span> = <span style="color: #9cdcfe;">url</span>.<span style="color: #dcdcaa;">split</span>(<span style="color: #ce9178;">'?v='</span>)</div><div><span style="color: #569cd6;"> const</span> <span style="color: #4fc1ff;">videoId</span> = <span style="color: #9cdcfe;">urlArray</span>[<span style="color: #9cdcfe;">urlArray</span>.<span style="color: #9cdcfe;">length</span> - <span style="color: #b5cea8;">1</span>]</div><br /><div><span style="color: #6a9955;"> // YouTube Data APIにて情報を取得</span></div><div><span style="color: #569cd6;"> const</span> <span style="color: #4fc1ff;">results</span> = <span style="color: #9cdcfe;">YouTube</span>.<span style="color: #9cdcfe;">Videos</span>.<span style="color: #dcdcaa;">list</span>(<span style="color: #ce9178;">'snippet,statistics'</span>, { <span style="color: #9cdcfe;">id:</span> <span style="color: #9cdcfe;">videoId</span> });</div><div><span style="color: #569cd6;"> const</span> { <span style="color: #4fc1ff;">items</span> } = <span style="color: #9cdcfe;">results</span></div><div><span style="color: #569cd6;"> const</span> { <span style="color: #4fc1ff;">statistics</span>, <span style="color: #4fc1ff;">snippet</span> } = <span style="color: #9cdcfe;">items</span>[<span style="color: #b5cea8;">0</span>]</div><div><span style="color: #569cd6;"> const</span> { <span style="color: #4fc1ff;">title</span>, <span style="color: #4fc1ff;">publishedAt</span>, <span style="color: #4fc1ff;">description</span> } = <span style="color: #9cdcfe;">snippet</span></div><div><span style="color: #569cd6;"> const</span> { <span style="color: #4fc1ff;">viewCount</span>, <span style="color: #4fc1ff;">likeCount</span>, <span style="color: #4fc1ff;">commentCount</span> } = <span style="color: #9cdcfe;">statistics</span></div><br /><div><span style="color: #c586c0;"> return</span> { <span style="color: #9cdcfe;">title</span>, <span style="color: #9cdcfe;">publishedAt</span>, <span style="color: #9cdcfe;">description</span>, <span style="color: #9cdcfe;">viewCount</span>, <span style="color: #9cdcfe;">likeCount</span>, <span style="color: #9cdcfe;">commentCount</span> }</div><div>}</div></div></div></div><div><br /></div></div><div> 上記を実行した結果のスプレッドシートがこちらになります。</div><blockquote style="border: none; margin: 0 0 0 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaGqcXzYNMVyqXZIdMNZx6ofDj_Cr5pF-MHfKyiRvO5c9bk4VNUc-QI9HD_Aj9btZtRcPE422qn-a-x9Y2v93JLb8CTg62P6CyeKg8GrKGat3Pd3L7_WhM-VVTe19IK0xS0tud6IhpQ9NlIHLcGhuFQH4wXnbhkRZ5IG7kgtLGsb7jwLqMN6UOei_8AQ/s1216/06.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="405" data-original-width="1216" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaGqcXzYNMVyqXZIdMNZx6ofDj_Cr5pF-MHfKyiRvO5c9bk4VNUc-QI9HD_Aj9btZtRcPE422qn-a-x9Y2v93JLb8CTg62P6CyeKg8GrKGat3Pd3L7_WhM-VVTe19IK0xS0tud6IhpQ9NlIHLcGhuFQH4wXnbhkRZ5IG7kgtLGsb7jwLqMN6UOei_8AQ/w640-h214/06.png" width="640" /></a></div><br /><div style="text-align: left;"><br /></div></blockquote><div><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>今回は1つの動画の情報だけを取得しましたが、<br /><div>次はチャンネル内の複数の動画の一覧を取得をしてみたいと思います。</div><div>それではまた。</div><p></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-50846860229010244482023-01-06T08:00:00.007+09:002023-01-09T16:01:36.283+09:00C#でFTP接続するならFluentFTPを使おう<style type="text/css">
.keyboard-key{background-color:#f9f9f9;background-image:-moz-linear-gradient(center top,#eee,#f9f9f9,#eee);border:1px solid #888;border-radius:2px;box-shadow:1px 2px 2px #ddd;font-family:inherit;font-size:.85em;padding:1px 3px}
table, td, th{ border: 1px solid black; }
</style>
<p> </p>
<p>どうも。ひっくです。</p>
<p>C#でFTP接続する機能を実装する場合、検索するとFtpWebRequestを使用する例が良く出てきます。</p>
<p>しかし.NET 6 以降では、FtpWebRequestは使用が非推奨となり、<a href='https://learn.microsoft.com/ja-jp/dotnet/api/system.net.ftpwebrequest?view=net-7.0#remarks'>FTPはサードパーティライブラリの使用が勧められている</a>ようです。</p>
<p>今回は、サードパーティライブラリで使い勝手が良さそうな「FluentFTP」について紹介します。</p>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMNKbF6X7xRAi8uktnYBezwl1hc4ke1ubh_t9dNdf-MoQD2nQxhIjlWKBurUXzSoICr5TdIYKl9r9AFLyDBb2ht9NkPsSnNDc-I0jNcsfCfRygOKknKGrozEPGGeWO5qbBK72LdByrC36zcxF4nXJduldpq5xVMSzOxBtzqen3qGjcodEBXzZHCNUZNA/s1600/erwan-hesry-dLnqJqL_0RQ-unsplash.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMNKbF6X7xRAi8uktnYBezwl1hc4ke1ubh_t9dNdf-MoQD2nQxhIjlWKBurUXzSoICr5TdIYKl9r9AFLyDBb2ht9NkPsSnNDc-I0jNcsfCfRygOKknKGrozEPGGeWO5qbBK72LdByrC36zcxF4nXJduldpq5xVMSzOxBtzqen3qGjcodEBXzZHCNUZNA/s1600/erwan-hesry-dLnqJqL_0RQ-unsplash.jpg" width="600"></a></div>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">FluentFTPについて</span></h4><br>
<p>NuGetでリリースされるFTP 、 FTPS ライブラリです。</p>
<p>MITライセンスのため、商用利用も可能です。</p>
<p>広範な FTP コマンドに対応しており、以下のようなことができます。</p>
<ul>
<li>ファイルのアップロード/ダウンロード</li>
<li>SSL/TLS 接続</li>
<li>ディレクトリ リストの自動解析</li>
<li>ファイルのハッシュ/チェックサム</li>
<li>ファイルのアクセス許可/CHMOD etc.</li>
</ul>
<p> </p>
<p>詳細は<a href='https://github.com/robinrodricks/FluentFTP#readme'>公式のREADME.md</a>を参照してください。</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">FluentFTPを使用する</span></h4><br>
<ol>
<li>NuGetでFluentFTPをインストールします。</li>
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6rTpNqzjGi4L9U7vP_nDDFOY3oj4-6ONK7m_6lER3ONVgSbyhtnwdTwCOB-jCX5vIR5whGtrSEP2r7ELTC0WwDj7iCs2iw-pfy1dm9QfkaVVIQiihhMptvk4TMKAacEIhG5Sy-pf8uY-aUcxghChI78BYeD43wjN73FvEevFRnjzkH2zSqVxkqsvJOA/s1600/image-20230109123219848.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1152" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6rTpNqzjGi4L9U7vP_nDDFOY3oj4-6ONK7m_6lER3ONVgSbyhtnwdTwCOB-jCX5vIR5whGtrSEP2r7ELTC0WwDj7iCs2iw-pfy1dm9QfkaVVIQiihhMptvk4TMKAacEIhG5Sy-pf8uY-aUcxghChI78BYeD43wjN73FvEevFRnjzkH2zSqVxkqsvJOA/s1600/image-20230109123219848.png" width="650"></a></div>
<p> </p>
<li>using ディレクティブを追加します。</li>
<pre class="line-numbers"><code class="language-sequence">using FluentFTP;
</code></pre></ol>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">FluentFTPの使用例</span></h4><br>
<ol>
<li><p>FTPサーバーへの接続確認、接続権限有無の確認</p>
<pre class="line-numbers"><code class="language-sequence">// FTPクライアントを作成して、FTP接続。
using var conn = new FtpClient("192.168.131.222", "ftpUser", "ftpPass");
conn.AutoConnect();
// FTPサーバーへの接続結果を確認
var isSuccess = conn.IsConnected;
// 指定ユーザー、パスワードでの接続結果を確認
isSuccess = conn.IsAuthenticated;
</code></pre>
</li>
<li><p>ファイルアップロード、ファイル移動</p>
<pre class="line-numbers"><code class="language-sequence">using var conn = new FtpClient("192.168.131.222", "ftpUser", "ftpPass");
conn.AutoConnect();
// ファイルアップロード
conn.UploadFile(@"C:\UploadFile.pdf", "/docs/UploadFile.pdf");
// ファイル移動
conn.MoveFile("/docs/UploadFile.pdf", "/docs/sub/UploadFile.pdf");
</code></pre>
</li>
<li><p>ファイル存在確認、ファイル削除</p>
<pre class="line-numbers"><code class="language-sequence">using var conn = new FtpClient("192.168.131.222", "ftpUser", "ftpPass");
conn.AutoConnect();
// ファイル存在確認
if (conn.FileExists("/docs/UploadFile.pdf"))
{
// ファイル削除
conn.DeleteFile("/docs/UploadFile.pdf");
}
</code></pre>
</li>
</ol>
<p> </p>
<p>上記は1例となります。</p>
<p>他の使用例については、<a href='https://github.com/robinrodricks/FluentFTP/tree/master/FluentFTP.CSharpExamples'>公式のサンプル</a>を参照してみてください。</p>
<p> </p>
<h4 style="border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); padding: 10px;">
<span style="font-weight: normal;">まとめ</span></h4><br>
<p>FTP操作をしたい場合、FluentFTPは使い勝手が非常に良いと思います。</p>
<p>C#でFTP接続する機能を実装する場合、使用してみてはいかがでしょうか。</p>
<p> </p>
<p>今回はこのへんで。ではまた!</p>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-69320698036506987972022-12-25T22:54:00.000+09:002022-12-26T05:26:24.324+09:00ルーターのペアレンタルコントロールを考える<p>こんにちは、やっまむーです。</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjDARFSKMDL-3krUb_ZsdRE6uvM9rghj0vgao-44fsa4tjNX_GnJTdaNzcv8wCq5MdbNeuB-Awkkypqw3ZBuwHYI3vFMmRn1tBJe8ZKPdSx4J515bZrD30Siw7Z1eD15VHTFMLqiPn0izhBfTQKPFLp7Wp5yTzYJ5fobHVTuRHARfp0pMzUeToOX5pP" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="844" data-original-width="1121" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEjDARFSKMDL-3krUb_ZsdRE6uvM9rghj0vgao-44fsa4tjNX_GnJTdaNzcv8wCq5MdbNeuB-Awkkypqw3ZBuwHYI3vFMmRn1tBJe8ZKPdSx4J515bZrD30Siw7Z1eD15VHTFMLqiPn0izhBfTQKPFLp7Wp5yTzYJ5fobHVTuRHARfp0pMzUeToOX5pP" width="319" /></a></div><p></p><p>子供のクリスマスプレゼントにポケモン スカーレットを買いました。<br />今のところ決められた時間を守ってプレイしているので、親として五月蠅く言うことはありません。<br />ただ、今後ゲームを進めていった時、大きくなった時も守ってくれるかはわかりません。<br />というわけで、我が家でできるペアレンタルコントロール機能について検討していました。</p>
<h4 style="background-color: white; border-bottom: 2px solid rgb(86, 156, 214); border-left: 10px solid rgb(86, 156, 214); font-stretch: normal; line-height: normal; margin: 0px; padding: 10px; position: relative;"><span style="color: #444444; font-family: arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">ルーターでできるペアレンタルコントロール</span></span></h4><p style="text-align: left;">Nintendo Switch本体で設定するペアレンタルコントロールについては、公式に情報があるのでそれを参考に設定します。</p><p style="text-align: left;"><a href="https://www.nintendo.co.jp/support/switch/parentalcontrols/index.html">みまもり設定(保護者による使用制限)</a></p><p style="text-align: left;">次に検討するのは、スマホやタブレットの利用時間です。<br />布団の中に持ち込んでこっそりと利用する、そんな時期が私にもありました。<br />(そして見つかって没収される・・・)<br /></p><p style="text-align: left;">SNSやソシャゲを利用する際はネットに繋がることが前提となるため、端末単位で利用時間の制限を設けます。<br />利用時間の制限については、最近のルーターだと標準装備になっているようで、我が家のAsus製ルーターにもペアレンタルコントロール機能がありました。</p><p style="text-align: left;">一つはアクセスできるサービスを制限するフィルタリング。<br />MACアドレスによる端末指定で、利用できるコンテンツに制限をかけます。<br />子供が利用する可能性があるものは、成人向けフィルターを設定するのが基本になりそうです。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhItVQQniaTmrDouuAD5483hIVlCBj2sxvvZdmaxNN2t5vBBhJh-TrWXJWjEss7bwZKG0U4s4iaXehnbXoy4Cx-W6b6g2gmweesKbTwcrZxqp0K7lP5aRoetXfCJd2KRQXTQNqZk_Vig2w5-Nlv9RWmQCPBQS1zdrJC_OH1Z5LKHuugbwYG0Z2Fd5gR" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="856" data-original-width="750" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhItVQQniaTmrDouuAD5483hIVlCBj2sxvvZdmaxNN2t5vBBhJh-TrWXJWjEss7bwZKG0U4s4iaXehnbXoy4Cx-W6b6g2gmweesKbTwcrZxqp0K7lP5aRoetXfCJd2KRQXTQNqZk_Vig2w5-Nlv9RWmQCPBQS1zdrJC_OH1Z5LKHuugbwYG0Z2Fd5gR=w280-h320" width="280" /></a></div><p></p><p style="text-align: left;">もう一つが利用時間帯を制限する時間設定。<br />こちらは指定した曜日や時間だけネットに繋がるようにするものです。<br />深夜の時間帯は基本的に除外し、年齢によって制限を緩めていく使い方になります。</p><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhnkq4-EEDzmkXn4mdz0u63OvGbH-sGxr6HXuYXkioWFPTMFla63-idWDqavnicD83lhkL71MNEAcskJ608wtRpcEwlwLUsjnUEIwB6RkYrCbLy-dDlB1e3YShHk0th1iALXkMgeCjuuoFk1KDFwGBGK1pmo0SYwKsjP_0S6s8giYj7JGaro82p7Bb8" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="771" data-original-width="755" height="320" src="https://blogger.googleusercontent.com/img/a/AVvXsEhnkq4-EEDzmkXn4mdz0u63OvGbH-sGxr6HXuYXkioWFPTMFla63-idWDqavnicD83lhkL71MNEAcskJ608wtRpcEwlwLUsjnUEIwB6RkYrCbLy-dDlB1e3YShHk0th1iALXkMgeCjuuoFk1KDFwGBGK1pmo0SYwKsjP_0S6s8giYj7JGaro82p7Bb8=w313-h320" width="313" /></a></div><p></p><p style="text-align: left;">ここでは時間帯しか選べませんが、メーカーによってはタイマー式で「〇時間だけ利用可能」という設定ができるものもあります。<br /></p><p style="text-align: left;">ルーターを選ぶ際、通信速度以外あまり意識することはありませんが、お子さんがいる家庭ではこういった機能についても検討してみてはいかがでしょうか。</p><p style="text-align: left;">ではではー。</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2042228913251579159.post-86267975078389759532022-12-18T23:50:00.002+09:002022-12-19T00:53:12.862+09:00NAS(Synology DS218j)を3年ほど使ってみた感想<p> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqRVAmgvpi0-zakC5Gm_wwFwQZW-FVQyxcM4imME6tlToX2-ZdRIOYEVj4XkXc7Y78nS3X7jqcgRanAyE7eU6Cm-1bxNxyUNuuB1Qzj88gQLNx3dC5sMGqV1te67sXirCMnO9hG-j0HPGyJmulgadlHpmoRRz25ZuKgex_T-rj3ozKps0vVfZhZIwO7Q/s5632/IMG_20210613_184639.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="5632" data-original-width="4224" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqRVAmgvpi0-zakC5Gm_wwFwQZW-FVQyxcM4imME6tlToX2-ZdRIOYEVj4XkXc7Y78nS3X7jqcgRanAyE7eU6Cm-1bxNxyUNuuB1Qzj88gQLNx3dC5sMGqV1te67sXirCMnO9hG-j0HPGyJmulgadlHpmoRRz25ZuKgex_T-rj3ozKps0vVfZhZIwO7Q/w480-h640/IMG_20210613_184639.jpg" width="480" /></a></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">こんにちは。よっしーです。</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">自宅でNASを運用してから、今年の冬で3年がたちます。</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">基本はスマホやPCのデータ置き場として使用しているため、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">あまり機能を使いこなしているとは言えませんが、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">低価格なのにいろいろ出来ちゃうので、良いと思うところをご紹介。</span></p><p style="clear: both; text-align: left;"><br /></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">■■■ 外部からNASに簡単アクセス ■■■</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">NASって家のローカルサーバというイメージでしたが、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">外部からもアクセスが可能です。ファイル共有はもちろん、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">QuickConnect機能を使えば、リモート接続もでき、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">NASの再起動やシャットダウンなども行えます。</span></p><div style="clear: both; text-align: center;">(ブラウザからQuickConnectサイトにアクセスし自分のNASのIDで接続するだけ)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUQZrKddurG8hjz8HKV28BAVXfYHFB-_7PDTYZlAnQXk0swwYo8jf8amvamT7eFVRMF0QGrNUYSd6SOYw562Reh1ib9zyNuPyMT9dTJzFBTUZ-xhf3wjsGB3TkjdwzZyIz0IZWE9roMeSxgmY7vR1CKMAEBIiJ7hiJ_TWdO-ywXhic2aFmjq7p0g5qJg/s1130/quickconnect.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1130" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUQZrKddurG8hjz8HKV28BAVXfYHFB-_7PDTYZlAnQXk0swwYo8jf8amvamT7eFVRMF0QGrNUYSd6SOYw562Reh1ib9zyNuPyMT9dTJzFBTUZ-xhf3wjsGB3TkjdwzZyIz0IZWE9roMeSxgmY7vR1CKMAEBIiJ7hiJ_TWdO-ywXhic2aFmjq7p0g5qJg/w640-h474/quickconnect.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">(NASに接続できました)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCTQu2K8cCagsT8WZZgiUlVqRg8Z1jFZWUyn37mDoNpW9Pjevdy0Oe6nwPCS2wbEiho4QKSVvX5_eKiFBdy5W_pOQd8ETmu_RkgaXFc52MIlIOHdhSyIN-oc3Fyq_sJ6EZPD6AH8l1YlrMdNpGobeXtB1GAJ9Y5QhqSk4bu_Fy7WgYcWDS7nMqHwQ_xA/s1130/desktop.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1130" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCTQu2K8cCagsT8WZZgiUlVqRg8Z1jFZWUyn37mDoNpW9Pjevdy0Oe6nwPCS2wbEiho4QKSVvX5_eKiFBdy5W_pOQd8ETmu_RkgaXFc52MIlIOHdhSyIN-oc3Fyq_sJ6EZPD6AH8l1YlrMdNpGobeXtB1GAJ9Y5QhqSk4bu_Fy7WgYcWDS7nMqHwQ_xA/w640-h474/desktop.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;">(管理メニューからソフトをインストールしたり、シャットダウンなんかもできる)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfKB9anFkXN6m7sakLwkzYCzkrBX6l59DBSSFuEW9-FC3UTn9Aj2hNbMIB9oXDhCA6r6KQiuu6QkezNc9oEKSfvvoc89BdhNRCwoFNI_tEhb50wS-RKiF8nNwi6u9LxyUUPrszx5KJpbTJeDH5UYRCQAkS_KJLW3cDkDSleuyrOkpKz0HodmtiYo-p5A/s1130/shutdown.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1130" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfKB9anFkXN6m7sakLwkzYCzkrBX6l59DBSSFuEW9-FC3UTn9Aj2hNbMIB9oXDhCA6r6KQiuu6QkezNc9oEKSfvvoc89BdhNRCwoFNI_tEhb50wS-RKiF8nNwi6u9LxyUUPrszx5KJpbTJeDH5UYRCQAkS_KJLW3cDkDSleuyrOkpKz0HodmtiYo-p5A/w640-h474/shutdown.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><p style="clear: both; text-align: left;"><span style="font-size: medium;">■■■ ブラウザでファイルを公開できる ■■■</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">外部とのファイルの受け渡しをNAS上で行うことができます。</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">サイズの大きいデータなどを受け渡しするとき、置き場所に困ったりしますよね。</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">NASがあれば解決です。しかもブラウザ経由で簡単にアクセスできます。</span></p><div style="clear: both; text-align: center;">(NAS上のファイルの共有メニューでリンクアドレスが出ます)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr349ZuA8gzIBeOAKJ5uKblKLie3w2znPqjclDkl8IYvQZt0xz5umWlLc6WH5QJym1Qx3nPsy-WQ0-dDraH5x5br67yU1SL_BlkoKL0LtnLzokvjo9uN5AJnYPC0wMvdZNZaPo6pW9u8H_LJkV1-4XpkPhfiL-sb3PV_VG_FQPzDr2rh-t6IfNqpcDLQ/s932/link.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="608" data-original-width="932" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr349ZuA8gzIBeOAKJ5uKblKLie3w2znPqjclDkl8IYvQZt0xz5umWlLc6WH5QJym1Qx3nPsy-WQ0-dDraH5x5br67yU1SL_BlkoKL0LtnLzokvjo9uN5AJnYPC0wMvdZNZaPo6pW9u8H_LJkV1-4XpkPhfiL-sb3PV_VG_FQPzDr2rh-t6IfNqpcDLQ/w640-h418/link.jpg" width="640" /></a></div><div style="text-align: center;"><br /></div><div style="text-align: center;">(公開する期間やアクセス許可数なども決めることが可能です)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fPHj7tcBfnxV75h2v4jlJu1UTTBQD1UFxbenCr9RdLuFWzN9LUh-1-L8Sfs4AB617heHi_u0iKhkvzCSsfE4kL59v0DglJC8sjbHhfdUqs0ocOWCyPrVVlZTpg_2QqDbXnCc87oKSezWu3KE-BCpXuEpvGeEgBmH684_wACRy8GZIKOkELNW8pIyZA/s915/detail.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="292" data-original-width="915" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2fPHj7tcBfnxV75h2v4jlJu1UTTBQD1UFxbenCr9RdLuFWzN9LUh-1-L8Sfs4AB617heHi_u0iKhkvzCSsfE4kL59v0DglJC8sjbHhfdUqs0ocOWCyPrVVlZTpg_2QqDbXnCc87oKSezWu3KE-BCpXuEpvGeEgBmH684_wACRy8GZIKOkELNW8pIyZA/w640-h204/detail.jpg" width="640" /></a></div><div style="clear: both; text-align: left;"><br /></div><div style="clear: both; text-align: center;">(ブラウザからアクセスするとダウンロード画面になります)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZmfNMQ-swIG1Nvx6FNjDg2yC3e90QAdF9ANyFxZkd99Rcum-TsW9g4ae__iPrTwIIrPXhi4RicgWmOEgZKydQiOurDy08GNmTGCzPb48oOqh_42bJqRRLAYjb1VzFLYTsKmZuRoEP4YG_-qqZO1dSKjcMbkY4VWwd-zHMxvWTLd5Q83J7do7UeTQBjA/s2400/Screenshot_2022-12-18-21-03-41-652_com.android.chrome.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZmfNMQ-swIG1Nvx6FNjDg2yC3e90QAdF9ANyFxZkd99Rcum-TsW9g4ae__iPrTwIIrPXhi4RicgWmOEgZKydQiOurDy08GNmTGCzPb48oOqh_42bJqRRLAYjb1VzFLYTsKmZuRoEP4YG_-qqZO1dSKjcMbkY4VWwd-zHMxvWTLd5Q83J7do7UeTQBjA/w288-h640/Screenshot_2022-12-18-21-03-41-652_com.android.chrome.jpg" width="288" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p style="clear: both; text-align: left;"><span style="font-size: medium;">■■■ 簡単にRAIDが組める ■■■</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">NASには耐久性のあるNAS向けのHDDを使う方が多いと思いますが、</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">ちょっとお高めなので、私は通常のPC向けのHDDをNASに使っています。</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">基本、24時間365日稼働させるサーバなので、故障するリスクを考えて</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">RAIDを組みました。NAS構築時にメニューから選択するだけで</span></p><p style="clear: both; text-align: left;"><span style="font-size: medium;">簡単にRAID構成を組むことが出来ます。</span></p><div style="clear: both; text-align: center;">(6TのHDDをRAID1(ミラーリング)で運用しています)</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij3AnjUptJEB954tWcZLwx5NaggR2DSMzjnnIROLUoa-9dSQ6u6DGpfC5CZPJQp9_jhRTnXAdvxXLCS0f5Lnk2HvbhYg3iS1VgIHoZtbyOIN9VCIcKbMucMuAzbGTFkKDX7MwhgdXdLnGxBwfYWRCPdFpQCfS29DQL0W8cD2W18tA2bbA0WN5R1LwWug/s1130/raid.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1130" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEij3AnjUptJEB954tWcZLwx5NaggR2DSMzjnnIROLUoa-9dSQ6u6DGpfC5CZPJQp9_jhRTnXAdvxXLCS0f5Lnk2HvbhYg3iS1VgIHoZtbyOIN9VCIcKbMucMuAzbGTFkKDX7MwhgdXdLnGxBwfYWRCPdFpQCfS29DQL0W8cD2W18tA2bbA0WN5R1LwWug/w640-h474/raid.jpg" width="640" /></a></div><p><span style="font-size: medium;">3年間、ほぼ休みなしで今のところ故障することなく動作を続けています。</span></p><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;">■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: medium;"><br /></span></div><p style="clear: both; text-align: center;"></p><p style="text-align: left;"><span style="font-size: medium;">NASを運用してみて、一番大きいと思った恩恵は「外から繋ぐことが出来る」</span></p><p style="text-align: left;"><span style="font-size: medium;">ということですね。</span></p><p style="text-align: left;"><span style="font-size: medium;">頻繁には使わないですが、いざという時に外からアクセスできて、</span></p><p style="text-align: left;"><span style="font-size: medium;">ファイルを出し入れできるのが素晴らしいと思います。</span></p><p style="text-align: left;"><span style="font-size: medium;"><br /></span></p><p style="text-align: left;"><span style="font-size: medium;">PCを組むよりも遥かに安上がりですので、</span></p><p style="text-align: left;"><span style="font-size: medium;">自宅でNAS運用を皆さんも始めてみませんか?</span></p><div style="text-align: left;"><span style="font-size: medium;">ではまた~。</span></div><p></p><p></p>Unknownnoreply@blogger.com0