tag:crieit.net,2005:https://crieit.net/users/fku_mnk/feed fkuMnkの投稿 - Crieit CrieitでユーザーfkuMnkによる最近の投稿 2022-08-16T15:46:16+09:00 https://crieit.net/users/fku_mnk/feed tag:crieit.net,2005:PublicArticle/18283 2022-08-16T15:46:16+09:00 2022-08-16T15:46:16+09:00 https://crieit.net/posts/Ryzen5-5600G ここにRyzen5の5600Gがあるじゃろ? <h2 id="じゃろ?"><a href="#%E3%81%98%E3%82%83%E3%82%8D%EF%BC%9F">じゃろ?</a></h2> <p><img src="https://storage.googleapis.com/zenn-user-upload/a68c204fd0b2-20220816.jpg" alt="部品" /></p> <h2 id="じゃ"><a href="#%E3%81%98%E3%82%83">じゃ</a></h2> <p><img src="https://storage.googleapis.com/zenn-user-upload/b5fdac15d291-20220816.jpg" alt="ぱそこん" /></p> <h2 id="仕様"><a href="#%E4%BB%95%E6%A7%98">仕様</a></h2> <h3 id="実売価格"><a href="#%E5%AE%9F%E5%A3%B2%E4%BE%A1%E6%A0%BC">実売価格</a></h3> <p>62,000円(税込)【2022年8月15日現在】</p> <h3 id="チップ"><a href="#%E3%83%81%E3%83%83%E3%83%97">チップ</a></h3> <p>AMD Ryzen5 5600G with Radeon Graphics</p> <p>6Core 12Thread Processor</p> <h3 id="メモリ"><a href="#%E3%83%A1%E3%83%A2%E3%83%AA">メモリ</a></h3> <p>32GB (16GBx2)</p> <p>128GBまで拡張可能</p> <h3 id="ストレージ"><a href="#%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8">ストレージ</a></h3> <p>500GB</p> <h3 id="フォームファクター"><a href="#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%BC">フォームファクター</a></h3> <p>ASRock A520M PRO4</p> <h3 id="筐体"><a href="#%E7%AD%90%E4%BD%93">筐体</a></h3> <p>SCYTHE OTTER</p> <h3 id="OS"><a href="#OS">OS</a></h3> <p>openSUSE Tumbleweed</p> <h2 id="プロセッサー 数値バトル"><a href="#%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%83%BC+%E6%95%B0%E5%80%A4%E3%83%90%E3%83%88%E3%83%AB">プロセッサー 数値バトル</a></h2> <p>CPUの実行速度バトルに興味のある方は、PASS MARKのCPU Benchmarksなどでお好みのCPUを検索して数値バトルをお楽しみ頂けます。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.cpubenchmark.net/cpu.php?cpu=AMD%20Ryzen%205%205600G&id=4325">PassMark - AMD Ryzen 5 5600G - Price performance comparison</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.cpubenchmark.net/cpu.php?cpu=Apple%20M1%20Max%2010%20Core%203200%20MHz&id=4585">PassMark - Apple M1 Max 10 Core 3200 MHz - Price performance comparison</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.cpubenchmark.net/cpu.php?cpu=Intel+Core+i5-12400&id=4677">PassMark - Intel Core i5-12400 - Price performance comparison</a></li> </ul> <h2 id="解説"><a href="#%E8%A7%A3%E8%AA%AC">解説</a></h2> <p>主にWebアプリケーション開発のための業務用PCとして組み立ててみました。</p> <p>3年+3年で合計6年間くらいの利用期間を想定しています。(※だいたい3年後くらいにメモリの増設、CPUおよびSSDの換装が行えるような構成になっています)</p> <p>CPUはAMDのZen3アーキテクチャのうちGPUを内蔵したモデルを採用しました。上位にRyzen7の5700Gがあり、検討を重ねたのですが、目的とする実用性にRyzen5で問題がない事と、差額でキーボードが買えてしまう事実に抗えずヨドバシでKeychronを発注してしまいました。(これは本当に届くのかまだ不明です)</p> <p>実行速度が必要十分であれば、CPUの価格帯を下げておくことで後日換装する際の精神的負担が少なくなるかもしれません。</p> <p>同様にメモリ容量も16+16の32GBとし、さらに余裕を持たせて4スロットあるマザーボードを採用しました。6年前に8GBのメモリのマシンで開発していた事を考えると、6年後の一般的なメモリ容量を想像することはなかなか難しいです。</p> <p><img src="https://storage.googleapis.com/zenn-user-upload/771bef5bd696-20220816.jpeg" alt="memtest86plus 2pass" /></p> <p>当初は最近話題のベアボーンキットを中心に9万円台で予算を見積もっていました。<br /> このまま発注してもよかったんですが、このところのRyzenまわりの情報を調べているうちにだんだん面白くなってきてしまって、ぼくの考えたさいきょうのぱそこんごっこをしているうちに完成したのがこの記事の構成になります。</p> <p>これは、筆者がパソコン工房(※今もなお現存しているPCショップのひとつ)の出身だったこともあるので、一般的にはベアボーンキットを選択するのが楽でいいとおもいますし、Windowsを主として利用する場合にはお買い得だったりもします。</p> <p>参考に、下記は2例ともMinisforumですが、今回検討していたベアボーンキットの例です。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://store.minisforum.jp/collections/amd-ryzen/products/minisforum-elitemini-hx90?variant=40862658396326">Minisforum EliteMini HX90 AMD Ryzen 9 5900HX Mini PC – Minisforum JP</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://store.minisforum.jp/collections/amd-ryzen/products/minisforum-elitemini-hm90?variant=41356963905702">Minisforum EliteMini HM90 Mini PC AMD Ryzen 9 4900H ミニPC – Minisforum JP</a></li> </ul> <h2 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h2> <p>とても早くなって良かったです。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>いかがでしたか?</p> <p>Macを買えばこのようなことは考えずに、直ちにコンピュータを使えるしスタバで開いてもカッコいいのでオススメです!!<br /> <a target="_blank" rel="nofollow noopener" href="https://www.apple.com/jp/mac/">Mac - Apple(日本)</a></p> <p>もし本文を読んで触発されてしまった方がいましたら、KindleでDOS/V POWER REPORTを3年分くらい読んでから、中古PCかジャンクPCを分解して再度組み立ててみるのが良さそうです。 ここまでやって、なんらかの夢が広がり始めたら恐らくこのような適性があるように思えます。近所のパソコン屋さんに相談したりしながらぜひ組み立ててみてください。</p> fkuMnk tag:crieit.net,2005:PublicArticle/17899 2021-12-29T13:08:58+09:00 2021-12-29T13:08:58+09:00 https://crieit.net/posts/10-2021 今年始めた知らん事 10選 2021 <p>今年も知らんことを色々やってみました。 未知との遭遇。</p> <p>これは、何も知らないしわからないので、個人的に実践してみた事の想い出報告です。<br /> <strong>※組織内で知らん事をすると、いらん事すなと言われがちなので充分お気をつけ下さい。</strong></p> <p>もくじ<br /> - Webアプリケーションを書くときにSvelteを使い始めた<br /> - データベースにCloud Firestoreを使ってみた<br /> - ソフトウェア開発の方針を準委任契約に切り替えた<br /> - オンライン技術書読書会に参加した<br /> - 技術コミュニティで仮想オンライン会場を使い始めた<br /> - PHPerKaigiに参加してアンカンファレンスを立てた<br /> - PHP Conference Japan 2021で知覚対応の限界に挑戦した<br /> - 献血駆動開発を始めた<br /> - エア帰宅(夕方頃に近所を歩き回る事)を始めた<br /> - 電子レンジを買った</p> <h2 id="Webアプリケーションを書くときにSvelteを使い始めた"><a href="#Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%ABSvelte%E3%82%92%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%81%9F">Webアプリケーションを書くときにSvelteを使い始めた</a></h2> <p>Svelteは、HtmlとかCSSとかJavascriptを一つのファイルにいっぺんに書いてなんやかんやするとWebアプリケーションができるやつの内の一つです。<br /> ReactとかVueとかAngularとか、そういう感じの物といえます。<br /> ドキュメントを読んで書いてみたら書けたので、そのまま試しに1週間くらいプロダクトコードを書き続けてみたら何かだいたい使えるようになりました。凄い! ありがとうございます。<br /> 公式サイトのチュートリアルもしっかりしているので、Webアプリケーション開発を学習する最初の一歩としても良さそうな気がします。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://svelte.dev/">Svelte • Cybernetically enhanced web apps</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://svelte.jp/">Svelte • サイバネティクスで強化されたWebアプリ</a> 日本語翻訳版</li> </ul> <h2 id="データベースにCloud Firestoreを使ってみた"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%ABCloud+Firestore%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F">データベースにCloud Firestoreを使ってみた</a></h2> <p>Cloud Firestoreは、Firebase(およびGCP)のサービスの一つで、SQLじゃない形式のデータベース的なサービスです。CollectionとDocumentという概念が交互に繰り返される構造になってて、ディレクトリとファイル的なOSのツリー構造っぽい感じになっています。<br /> 今回はGoogle AppEngineに設置したPHPアプリケーションから接続したんですが、ツリー的な構造に慣れてくるとわりと使いやすかったです。<br /> あと、Collectionを一括で複製したいときはコードを書かないと出来ないので、コンソール上で簡単に複製できるようになればもっと便利かも。(※GCPでデータベース全体をプロジェクト間で移動する方法はある)</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://firebase.google.com/docs/firestore/quickstart?hl=ja">Cloud Firestore を使ってみる  |  Firebase Documentation</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://firebase-php.readthedocs.io/en/stable/cloud-firestore.html">Cloud Firestore — Firebase Admin SDK for PHP Documentation</a></li> </ul> <h2 id="ソフトウェア開発の方針を準委任契約に切り替えた"><a href="#%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E6%96%B9%E9%87%9D%E3%82%92%E6%BA%96%E5%A7%94%E4%BB%BB%E5%A5%91%E7%B4%84%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%9F">ソフトウェア開発の方針を準委任契約に切り替えた</a></h2> <p>これはまだ事例が少ないので結論的なものはまだ無くて、契約の主体が技術関係となって依頼側とも協力してソフトウェア開発を続ける概念が世間にもっと浸透していくといいなとおもっています。<br /> 現状では、協力関係を築いて維持していくための理解を得る、というコストがかなり高い実感を得ました。</p> <h2 id="オンライン技術書読書会に参加した"><a href="#%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E6%8A%80%E8%A1%93%E6%9B%B8%E8%AA%AD%E6%9B%B8%E4%BC%9A%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%9F">オンライン技術書読書会に参加した</a></h2> <p>今年の2月から、技術書をオンラインで読む読書会、<strong>技術書読書会</strong>に参加し始めました。<br /> これは、「プログラミング言語 Go」や「Effective Java 第3版」などの翻訳者である、柴田芳樹さんが主催している読書会で、だいたい月に1度Zoomミーティングで集まって、1冊の技術書を1ページずつ順番に音読しつつ内容についてディスカッションする集まりです。<br /> 柴田さんとは、10年ほど前にうちの近所のローカルテックカンファレンスへ講師として招聘させて頂いた時にお会いした以来だったので、世間にオンラインミーティングが浸透し始めたお陰?でこうして改めて参加する事ができました。<br /> 技術書を読み込むには、一人で落ち着いて読んだほうが理解はできるかな?とおもうところもあったんですが、複数人で集まると個人個人の着想や実体験に基づく感想をその場で共有できるので、本に書かれている事から連続したより広い部分まで学べるような感じがあるのには目から鱗でしたし、むしろ目が虚でした。<br /> 現在は「達人プログラマー 第2版」を読み始めたところなので、ご興味のある方はぜひどうぞどうぞ。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://technical-book-reading.connpass.com/">技術書読書会 - connpass</a></li> </ul> <h2 id="技術コミュニティで仮想オンライン会場を使い始めた"><a href="#%E6%8A%80%E8%A1%93%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%81%A7%E4%BB%AE%E6%83%B3%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E4%BC%9A%E5%A0%B4%E3%82%92%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%81%9F">技術コミュニティで仮想オンライン会場を使い始めた</a></h2> <p>うちは事務所の一室をテックコミュニティスペースとして使えるようにしていて、昨今集まれないのでとてもつらいよ... (※本当は特に辛くはないです。今集まらないのは合理的なので。)<br /> でも我々はIT名人なので、技術で解決できるとおもいます。みたいな流れが2020年後半頃にありました。日本だと、RemoをはじめとしてSpatialChat、oViceなどが注目を集めるようになっていたかとおもいます。一方海外では、GDCRやChaos Computer ClubなどのイベントではGather、あるいはそれを元にしたシステムが使われていて、Twitterとかを見る限りめっちゃ楽しそうでした。<br /> ということで今年の1月にCoderDojoのメンバーと一緒に使ってみたところ、とても体験が良かったのでそのままGatherでオンライン会場を作ってみました。<br /> Gatherを選んだのはそれだけではなくて、Gatherで作ったスペースに来たひとたちが、これは良いぜとおもったら自分たちでもすぐにアカウントを登録してスペースを作れることと、作ったスペース同士を連結して、行き来することができるのがナイス!だと感じたところにあります。<br /> みんなも使ってみよう!</p> <p>※試しに毎週イベントを開いていたんですが、夏頃から仕事が大変になってきたので休止しています。仕事が大変にならなくても生活ができるようになったら再開したろ。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.gather.town/">Gather | A better way to meet online.</a></li> </ul> <h2 id="PHPerKaigiに参加してアンカンファレンスを立てた"><a href="#PHPerKaigi%E3%81%AB%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%A6%E3%82%A2%E3%83%B3%E3%82%AB%E3%83%B3%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%E3%82%92%E7%AB%8B%E3%81%A6%E3%81%9F">PHPerKaigiに参加してアンカンファレンスを立てた</a></h2> <p>今年1月、TwitterでPHPerKaigiがオンラインで開催されるという情報を見て即チケットを申し込んだまま時は流れ、突然デカイ青い箱が物理で届く事が開催の幕開けの除幕となっていて驚きました。<br /> なんか、開催中に開催の構造自体がアップデートされて、突然アンカンファレンス枠が爆誕する様子(ライブ感)を垣間見える事ができたのでとても良かったです。<br /> プログラミングがあまり得意ではない事も有り、PHP界隈の陽のあたる場所にいる人々とはほとんど面識がなかったので、これは知らん人に紛れ込むチャンス!として、想い出アンカンファレンス登録をしました。<br /> ちなみに、上記の技術書読書会、下記のPHP Conferenceも併せて、知らん人ばかりの集まりでしたので、人見知りのコンピュータGEEK個人開発者がこの状況で生き残るための生存戦略は、えっ?以前からいましたけど?みたいな雰囲気を見せつつ、知らん人が知らん人でなくなるまで存在し続ける事でした。<br /> ※<strong>重要な考察:</strong> これは生存者バイアスかもしれません。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://phperkaigi.jp/2021/">PHPerKaigi 2021</a></li> <li>参考:次回開催 <a target="_blank" rel="nofollow noopener" href="https://phperkaigi.jp/2022/">PHPerKaigi 2022</a></li> </ul> <h2 id="PHP Conference Japan 2021で知覚対応の限界に挑戦した"><a href="#PHP+Conference+Japan+2021%E3%81%A7%E7%9F%A5%E8%A6%9A%E5%AF%BE%E5%BF%9C%E3%81%AE%E9%99%90%E7%95%8C%E3%81%AB%E6%8C%91%E6%88%A6%E3%81%97%E3%81%9F">PHP Conference Japan 2021で知覚対応の限界に挑戦した</a></h2> <p>今年9月、TwitterでPHP Conferenceが当日スタッフを募集しているという情報を見て即申し込んだら即返信が来て即10月になって、めでたく開催されました。<br /> PHP Conference Japanは2020年もオンラインで開催されており、その時のライブ配信を見ながらDiscordサーバでなんか盛り上がっている感じが良かったのと、丁度予定が被っていなかったのでなんかナイスなタイミングで協力できたかとおもいます。<br /> ブラウザを4画面表示して、4つのDicordチャンネルをリアルタイムで同時に追っていくのも初めての試みでした。Discordの使用は、ライブ視聴ではない参加者でも後から情報と雰囲気を追いやすくなる利点があるなあとおもいました。<br /> あと、一般的な人類が同時に知覚・対応できる会話は一つ迄。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://phpcon.php.gr.jp/2021/">PHP Conference Japan 2021</a></li> </ul> <h2 id="献血駆動開発を始めた"><a href="#%E7%8C%AE%E8%A1%80%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%82%92%E5%A7%8B%E3%82%81%E3%81%9F">献血駆動開発を始めた</a></h2> <p>献血駆動開発という言葉は存在しないので、適当に書きました。ご想像ください。<br /> 献血は、一度採血すると次の採血までに一定期間を要するんですが、そのうちの2週間くらい間をあけるタイプのやつを続けるようにしています。<br /> これは、献血は出来ない人もいるという事と、胃腸炎とかの体調が回復して割と健康になった事と、定期的に献血ルームに出かけられないくらい忙しくなったらそれは段取りが破綻しているという目安になるのではという事と、普段は一人で虚無になって働いているところを献血ルームに行くと存在が肯定され次回もまた実在するぞという気持ちになれるからという理由での事となります。<br /> 体調の変化とかにも気をつけ安くなるかも。</p> <p>ちなみに、注射はニガテではない方では無いです。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.kenketsu.jp/Login?startURL=%2F">献血Web会員サービス「ラブラッド」|日本赤十字社</a></li> </ul> <h2 id="エア帰宅(夕方頃に近所を歩き回る事)を始めた"><a href="#%E3%82%A8%E3%82%A2%E5%B8%B0%E5%AE%85%28%E5%A4%95%E6%96%B9%E9%A0%83%E3%81%AB%E8%BF%91%E6%89%80%E3%82%92%E6%AD%A9%E3%81%8D%E5%9B%9E%E3%82%8B%E4%BA%8B%29%E3%82%92%E5%A7%8B%E3%82%81%E3%81%9F">エア帰宅(夕方頃に近所を歩き回る事)を始めた</a></h2> <p>エア帰宅という言葉も存在しないので、適当に書きました。ご想像ください。<br /> 外出時間が極端に減少したため、2020年頃から続く慢性的な運動不足の解消のために編み出されました。最初は室内で毎日1時間ほど適当に運動するというのを3ヶ月くらい続けてみたんですが、全く効果がなく、偶然にも乗っていたバイクが故障して中距離を歩いた時に気が付いた技です。<br /> えっ? 徒歩、歩けばできる。毎日歩けば良いのでは? 的な。<br /> ただ、目的なく歩くと職務質問されがちな実績があるので、だいたい夕方頃に仕事の一区切りを付けて、今から帰宅するぞ!という気持ちで近所を歩き回って戻ってきます。事務所で生活しているので。</p> <h2 id="電子レンジを買った"><a href="#%E9%9B%BB%E5%AD%90%E3%83%AC%E3%83%B3%E3%82%B8%E3%82%92%E8%B2%B7%E3%81%A3%E3%81%9F">電子レンジを買った</a></h2> <p>成人して以来、テレビ、車、電子レンジに興味をもたない哀れな人類として生きてきたんですが、なんか毎日パンに適当な野菜を挟んだやつをチンして食べたい機運が高まってきたので買いました。<br /> ボタンを押してソワソワするだけで冷たいコーヒー牛乳が温かくなるので、人類は電子レンジを買うべき。</p> <hr /> <p>以上、10選です。10無かったらどうしようかとおもいましたが、数えたらあったので成立しました。</p> <p>では、そろそろ凍りついたほうれん草を買いにでかけるので。<br /> よいお年をお迎え下さい。</p> <p>あっ、餅が! 新年は餅がチンできるのでは!! 餅さえあれば</p> fkuMnk tag:crieit.net,2005:PublicArticle/17890 2021-12-23T00:11:52+09:00 2021-12-23T11:05:29+09:00 https://crieit.net/posts/Svelte Svelte、そのドキュメントは驚きの読みやすさ!的な。 <p>この記事は、<a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2021/svelte">Svelte Advent Calendar 2021</a>の14日目の投稿が空いているのでは? とおもったので22日の夜にこれから書くぞとおもって勢いで登録した記事です。</p> <h1 id="Svelte、そのドキュメントは驚きの読みやすさ!的な。"><a href="#Svelte%E3%80%81%E3%81%9D%E3%81%AE%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AF%E9%A9%9A%E3%81%8D%E3%81%AE%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%95%EF%BC%81%E7%9A%84%E3%81%AA%E3%80%82">Svelte、そのドキュメントは驚きの読みやすさ!的な。</a></h1> <p>これはSvelteという、JavaScriptとかHTMLとかCSSとかを一緒に書いたらWebアプリケーションになるやつ※について書かれている、実体験に基づいたドキュメンタリーです。</p> <p><strong>※ReactとかVueとかAngularが有名だよ</strong></p> <h2 id="あらすじ"><a href="#%E3%81%82%E3%82%89%E3%81%99%E3%81%98">あらすじ</a></h2> <p>2021年3月、Vue歴三年(適当)、血の涙を流しながらVueを3にしてjQuery製のアプリケーションをリプレイスしたワイは、もうすでに限界が来とったんや。</p> <h2 id="新たなる力を求めて"><a href="#%E6%96%B0%E3%81%9F%E3%81%AA%E3%82%8B%E5%8A%9B%E3%82%92%E6%B1%82%E3%82%81%E3%81%A6">新たなる力を求めて</a></h2> <p>精神に限界を感じたワイは、新たなる力を求めて自然とViteに手を伸ばしたんや。<br /> そしたら、すぐさまボコボコにされた。なぜなら、ViteもVueと同じくEvan Youだったからなんや。<br /> 始祖Evan Youの何気ないAPI Referenceがワイの心を傷つけたんやなあ。※</p> <p><strong>※これはワイの知能がEvan Youのドキュメントパワーを下回っているからなんや。個人の感想なんやで。</strong></p> <h2 id="Snowpack現る"><a href="#Snowpack%E7%8F%BE%E3%82%8B">Snowpack現る</a></h2> <p>神Referenceにボコボコにされながら薄れゆく意識の中でワイは見たんや、<a target="_blank" rel="nofollow noopener" href="https://vitejs.dev/guide/comparisons.html#snowpack">Comparisons with Other No-Bundler Solutions ... Snowpack</a>と書いてあるのを。<br /> 命からがらViteのページを閉じ、Snowpackのページを開くことで安堵したワイは遂にそこで見てしまったんや、<a target="_blank" rel="nofollow noopener" href="https://www.snowpack.dev/tutorials/svelte">Getting Started with Svelte</a>と書いてあるのを!!!</p> <h2 id="秘密なんや"><a href="#%E7%A7%98%E5%AF%86%E3%81%AA%E3%82%93%E3%82%84">秘密なんや</a></h2> <p>ワイはそこでチビってしまった。何をチビッたのかは秘密なんやけどな。なぜなら、そこに書かれている通りに、GettingをStartedしたらSvelteとwithで、簡単にSvelteのロゴマークが画面に表示されてしまったからなんや。<br /> 衝撃が脳裏を駆け巡る。<br /> そしてワイはGoing furtherした。</p> <h2 id="Svelte、それは新たなる宇宙域"><a href="#Svelte%E3%80%81%E3%81%9D%E3%82%8C%E3%81%AF%E6%96%B0%E3%81%9F%E3%81%AA%E3%82%8B%E5%AE%87%E5%AE%99%E5%9F%9F">Svelte、それは新たなる宇宙域</a></h2> <p>西暦2021年4月、Going furtherしたワイは<a target="_blank" rel="nofollow noopener" href="https://svelte.dev">https://svelte.dev</a>に来ていた。※<br /> ※これは後から知ったが<a target="_blank" rel="nofollow noopener" href="https://svelte.jp">日本語訳サイト</a>も存在する。皆はこっちも読もう!</p> <p>ここでワイはTutorialを読んだ、読みふけった!! なぜなら半日くらいあったら読めるやろとおもって読んだら2日くらい掛かったからなんや。半分寝ながら読み続けた。お忙しい方々ならもっと掛かるかもしれん。それくらい手厚いTutorialになっとるんや。<br /> ほんでな! ほんでな! 画面の左側に書かれてある説明に沿って、画面の右上の画面にコードを書き込んでいくと、画面の右下の画面に結果が表示されるんや!! すごいやろがい!!</p> <p>※ぜひ実際におためしください。<a target="_blank" rel="nofollow noopener" href="https://svelte.dev/tutorial/basics">https://svelte.dev/tutorial/basics</a></p> <h2 id="Svelte近接格闘術"><a href="#Svelte%E8%BF%91%E6%8E%A5%E6%A0%BC%E9%97%98%E8%A1%93">Svelte近接格闘術</a></h2> <p>タイトルに特に意味は無いんや、ちなみにSvelteはスベルトって読むんやで。しらんけど。<br /> こうしてSvelteを身につけたワイはその月のうちに最初の業務アプリケーションを書き、その後もSnowpackで2つSvelteKitで3つのアプリケーションを世に送り出すことができたんや。<br /> SvelteKitについて詳しくはここでは書かんで。なぜならViteを使うとるからな^^。</p> <h2 id="そのドキュメントは驚きの読みやすさ"><a href="#%E3%81%9D%E3%81%AE%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AF%E9%A9%9A%E3%81%8D%E3%81%AE%E8%AA%AD%E3%81%BF%E3%82%84%E3%81%99%E3%81%95">そのドキュメントは驚きの読みやすさ</a></h2> <p>Evan Youのドキュメントにボコボコにされ続けていたワイが、こうも短期間で立て続けにアプリケーションを世に出すことができたのはなんでなんやろか。<br /> それは、おそらく<a target="_blank" rel="nofollow noopener" href="https://svelte.dev">svelte.dev</a>のドキュメントが驚きの読みやすさだったからなんや。※<br /> なんかしらんけど、読んで書いたら動くんや。動かんかったら、また読むんやで。<br /> 書けば書くほど動くようになるので、ワイも調子に乗って中高生向けにサンプルコードとかを作って嫌がられたりもした程なんや。良かったら試してな。<br /> <a target="_blank" rel="nofollow noopener" href="https://zenn.dev/fkumnk/articles/ebadd01cd2ca83">中高生に嫌がられた伝説のサンプルコード</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/fkumnk/articles/bc8ae4fe43c6cc">中高生に嫌がられた伝説のサンプルコード REST-API編</a></p> <p><strong>※個人の感想なんやで。</strong></p> <h2 id="個人の感想のまとめ"><a href="#%E5%80%8B%E4%BA%BA%E3%81%AE%E6%84%9F%E6%83%B3%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81">個人の感想のまとめ</a></h2> <p>このようにSvelteはめっちゃ学習コストが低いんや。書いたら書いただけ動くしな!<br /> そして、状態管理がめっちゃわかりやすいんや。『ワイでもわかる☆状態管理』なんやで。<br /> でもな、Svelteはまだまだ秘められたポテンシャルが盛り盛りの発展途上プロジェクトなんや。<br /> だからこれからも、皆でガシガシSvelteを書いて積極的に盛り上げていこうな!!</p> <p>2021年12月22日 ここに記す</p> <h2 id="SVELTE"><a href="#SVELTE">SVELTE</a></h2> <p><strong>CYBERNETICALLY ENHANCED WEB APPS</strong><br /> <img src="https://storage.googleapis.com/zenn-user-upload/9e2ad2d4a25b-20211222.png" alt="Svelteサイトイメージ" /><br /> <a target="_blank" rel="nofollow noopener" href="https://svelte.dev">Svelte公式サイト</a></p> fkuMnk tag:crieit.net,2005:PublicArticle/17388 2021-06-11T06:41:05+09:00 2021-06-11T06:41:05+09:00 https://crieit.net/posts/Svelte-PHP-REST-API Svelte学習帳 PHP REST-API編 <h1 id="Svelte学習帳 PHP REST-API編"><a href="#Svelte%E5%AD%A6%E7%BF%92%E5%B8%B3+PHP+REST-API%E7%B7%A8">Svelte学習帳 PHP REST-API編</a></h1> <h2 id="概要"><a href="#%E6%A6%82%E8%A6%81">概要</a></h2> <ul> <li>SvelteKitでWebアプリケーションを作ります</li> <li>PHPでREST-APIを作ります</li> <li>fetchで通信します</li> <li>データベースに保存したり読み込んだりします</li> </ul> <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>これは、ローカル環境でREST-APIの練習をするサンプルコードです。<br /> SveltKitで作成したWebアプリケーションに表示されているパラメータを、REST-APIでデータベースに保存します。</p> <p>以前に投稿した記事「続・コードを書いてステータス画面を表示する」の続編になっています。</p> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://zenn.dev/fkumnk/articles/ebadd01cd2ca83">続・コードを書いてステータス画面を表示する</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3dokAjJAPj_KBHTNaeIM9dT541d7B0rDoxcvmH3OKnlKmOjA-_jjRPi01AI__PVLuJmvIuglv1GHLFjWZ3DK8qzSuDXo2avfBdIj5EDi7TV_3N4mVWbQuWweTSpWwxq6b7L7qjXs0nXwPqqZo1yPMCyZA=w1247-h627-no?authuser=0" alt="参考記事" /></p> <h3 id="動作要件"><a href="#%E5%8B%95%E4%BD%9C%E8%A6%81%E4%BB%B6">動作要件</a></h3> <ul> <li>SvelteKitが動作すること</li> <li>PHP ビルトインサーバーが動作すること</li> <li>PHP Composerが動作すること</li> </ul> <h2 id="STEP00 準備します"><a href="#STEP00+%E6%BA%96%E5%82%99%E3%81%97%E3%81%BE%E3%81%99">STEP00 準備します</a></h2> <p>ここでは2つのプロジェクトフォルダを作成します。</p> <h3 id="SvelteKitのプロジェクトを作成する"><a href="#SvelteKit%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">SvelteKitのプロジェクトを作成する</a></h3> <p>SvelteKitのプロジェクトを作成します。<br /> ここではプロジェクト名を</p> <pre><code>svelte-rest-app </code></pre> <p>としています。</p> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://kit.svelte.dev/">SvelteKit • The fastest way to build Svelte apps</a></p> <h3 id="PHPプロジェクトを作成する"><a href="#PHP%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">PHPプロジェクトを作成する</a></h3> <p>svelte-rest-appと同じ階層に</p> <pre><code>php-rest-app </code></pre> <p>というフォルダを作成します。</p> <p>今回はPopcornというマイクロフレームワークを使用するので、Composerでインストールします。</p> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://github.com/popphp/popcorn">popphp/popcorn: Popcorn PHP REST Micro-Framework</a></p> <h3 id="確認"><a href="#%E7%A2%BA%E8%AA%8D">確認</a></h3> <p>サンプルプロジェクトはこういう感じになります。</p> <p>確認:<a target="_blank" rel="nofollow noopener" href="https://github.com/hideki-masuoka/samplecode-svelte-rest-app/tree/Step00">samplecode-svelte-rest-app at Step00</a></p> <h2 id="STEP01 パラメータを取得する"><a href="#STEP01+%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B">STEP01 パラメータを取得する</a></h2> <p>Webアプリを作成して、アプリ内で使用するパラメータを取得する機能を追加します。</p> <h3 id="Webアプリを作ります"><a href="#Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">Webアプリを作ります</a></h3> <p>/svelte-rest-app/src/routes/index.svelte を開きます。<br /> 内容を消去して、Svelte REPLのサンプルコードに置き換えます。<br /> サンプルコード:<a target="_blank" rel="nofollow noopener" href="https://svelte.dev/repl/2ad1f0ae67b7406e8beee9a2efbceda3?version=3.37.0">IamStronger • REPL • Svelte</a></p> <h3 id="パラメータ取得機能を作ります"><a href="#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E5%8F%96%E5%BE%97%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">パラメータ取得機能を作ります</a></h3> <p>scriptの内容に、fetchでパラメータを取得する機能を追記します。</p> <pre><code class="JavaScript"><script> // STEP01 onMountを呼び出します import { beforeUpdate, onMount } from 'svelte'; let name = 'name'; let lv = 10; let max_hp = 1000; let hp = 80; let max_mp = 10; let mp = 8; let agi = 5; let tec = 2; let str = 9; let luc = 1; let text = `I'm stronger.`; beforeUpdate(()=>{ max_hp = lv * str; max_mp = Math.round((lv * agi) / 2); }); // STEP01 fetchでパラメータを取得する機能 const getParams = async () => { const serverURL = 'http://localhost:8080/params'; const response = await fetch( serverURL, { method: 'GET', mode: 'cors', credentials: 'omit' } ); return await response.json(); } // STEP01 アプリマウント時に、取得したパラメータを変数に適用する処理 onMount(async ()=>{ let params = await getParams(); name = params.name; lv = params.lv; hp = params.hp; mp = params.mp; agi = params.agi; tec = params.tec; str = params.str; luc = params.luc; text = params.text; }); </script> </code></pre> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch">Fetch の使用 - Web API | MDN</a></p> <h3 id="Webアプリケーションに応答する機能を作ります"><a href="#Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%BF%9C%E7%AD%94%E3%81%99%E3%82%8B%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">Webアプリケーションに応答する機能を作ります</a></h3> <p>/php-rest-appフォルダに、publicフォルダを作成して、そこにindex.phpを作成します。</p> <pre><code>/php-rest-app/public/index.php </code></pre> <p>パラメータを返す機能をindex.php内に作ります。</p> <pre><code class="php"><?php require_once '../vendor/autoload.php'; use Popcorn\Pop; // STEP01 マイクロフレームワークの準備 $app = new Pop(); // STEP01 パラメータ取得に応答する機能を登録します $app->get( '/params/', function () { // STEP01 ローカル環境間でのアクセスを許可します header('Access-Control-Allow-Origin: http://localhost:3000'); header('Access-Control-Allow-Headers: Origin, Content-Type'); $params = [ 'name' => 'name2', 'lv' => '12', 'hp' => '90', 'mp' => '10', 'agi' => '6', 'tec' => '3', 'str' => '10', 'luc' => '2', 'text' => "I'm stronger2." ]; echo json_encode($params); } ); $app->run(); </code></pre> <h3 id="ローカル環境で実行する"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">ローカル環境で実行する</a></h3> <p>/php-rest-app/public/フォルダに移動して、サーバを起動します。</p> <pre><code>php -S localhost:8080 </code></pre> <p>/svelte-rest-app/フォルダに移動してアプリケーションを起動します。</p> <p>パラメータの内容が書き換わっていれば成功です。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3el4glcnITHtpnTUvkG8yVzoyt1xWVbP32RB7ma4wQvx1_B_sGHMDVEitxtHkqEEOyUsVYVXW3rVRxGJV1t6xegDiT1K2dcHks2PudQicl72RP7ef-49wLTrAFR2klfCU6mxpG2YY2GmSgKjGjL1f3hMA=w372-h692-no?authuser=0" alt="STEP01確認画像" /></p> <h3 id="確認"><a href="#%E7%A2%BA%E8%AA%8D">確認</a></h3> <p>サンプルプロジェクトはこういう感じになります。</p> <p>確認:<a target="_blank" rel="nofollow noopener" href="https://github.com/hideki-masuoka/samplecode-svelte-rest-app/tree/Step01">samplecode-svelte-rest-app at Step01</a></p> <h2 id="STEP02 パラメータを送信する"><a href="#STEP02+%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B">STEP02 パラメータを送信する</a></h2> <h3 id="パラメータ送信機能を作ります"><a href="#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E9%80%81%E4%BF%A1%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">パラメータ送信機能を作ります</a></h3> <p>/svelte-rest-app/src/routes/index.svelte を開きます。</p> <p>scriptに送信機能を追記します。</p> <pre><code class="JavaScript"><br />// STEP02 送信結果を受け取る変数 let message = false; // STEP02 fetchでパラメータを送信する機能 const saveParams = async () => { const serverURL = 'http://localhost:8080/saveparams'; const response = await fetch( serverURL, { method: 'POST', mode: 'cors', credentials: 'omit', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name: name, lv: lv, hp: hp, mp: mp, agi: agi, tec: tec, str: str, luc: luc, text: text }) } ); message = await response.json(); } </code></pre> <h3 id="送信ボタンを作ります"><a href="#%E9%80%81%E4%BF%A1%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">送信ボタンを作ります</a></h3> <p>textareaの下にパラメータを送信するボタンを追記します</p> <pre><code class="HTML"><br> <button on:click="{saveParams}"> SAVE </button> {#if message} <br> <strong>{message.message}</strong> {/if} </code></pre> <h3 id="Webアプリケーションに応答する機能を作ります"><a href="#Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%BF%9C%E7%AD%94%E3%81%99%E3%82%8B%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99">Webアプリケーションに応答する機能を作ります</a></h3> <p>/php-rest-app/public/index.phpを開きます</p> <p>パラメータ送信に応答する機能を追記します。</p> <pre><code class="PHP"><br />// STEP02 CORS対応処理 $app->options( '/saveparams/', function () { header('Access-Control-Allow-Origin: http://localhost:3000'); header('Access-Control-Allow-Headers: Origin, Content-Type'); } ); // STEP02 パラメータ送信に応答する機能を登録します。 $app->post( '/saveparams/', function () { header('Access-Control-Allow-Origin: http://localhost:3000'); header('Access-Control-Allow-Headers: Origin, Content-Type'); // STEP02 受信確認メッセージを返します echo json_encode(['message' => '受信しました']); } ); </code></pre> <h3 id="ローカル環境で実行する"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">ローカル環境で実行する</a></h3> <p>/php-rest-app/public/フォルダに移動して、サーバを起動します。</p> <pre><code>php -S localhost:8080 </code></pre> <p>/svelte-rest-app/フォルダに移動してアプリケーションを起動します。</p> <p>SAVEボタンをクリックして、メッセージが返ってくれば成功です。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3fmpdOsAcskzAFzROsb95ROyjVToXI_l_7olcgIdadBvr8sfA9J7_hb0yoq4ljpnWoCv4Ko6sJlX19NP0kyMukHJhd1Jjvd8ED8CwD8BO9he7IHkI-sAOHaXzFK9v5numcSINyExhtkyrlbLFEVFBEi3g=w375-h180-no?authuser=0" alt="STEP02確認画像" /></p> <h3 id="確認"><a href="#%E7%A2%BA%E8%AA%8D">確認</a></h3> <p>サンプルプロジェクトはこういう感じになります。</p> <p>確認:<a target="_blank" rel="nofollow noopener" href="https://github.com/hideki-masuoka/samplecode-svelte-rest-app/tree/Step02">samplecode-svelte-rest-app at Step02</a></p> <h2 id="STEP03 パラメータを保存する"><a href="#STEP03+%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B">STEP03 パラメータを保存する</a></h2> <h3 id="pop-httpをインストールします"><a href="#pop-http%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%BE%E3%81%99">pop-httpをインストールします</a></h3> <p>/php-rest-appフォルダに移動します</p> <p>今回はpop-httpというライブラリを使って、送信されたパラメータを受け取るのでComposerでインストールします。</p> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://github.com/popphp/pop-http">popphp/pop-http: Pop Http Component</a></p> <h3 id="データベースを準備します"><a href="#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E6%BA%96%E5%82%99%E3%81%97%E3%81%BE%E3%81%99">データベースを準備します</a></h3> <p>/php-rest-app/public/index.phpを開きます。</p> <p>フレームワークの準備処理の手前に、データベースを準備する処理を追記します。</p> <pre><code class="php">// STEP03 データベースを準備します $pdo = new PDO('sqlite:example.db'); $sql = <<< "SQL" CREATE TABLE IF NOT EXISTS config ( param_id INTEGER PRIMARY KEY, params TEXT ); SQL; $pdo->exec($sql); </code></pre> <p>参考:<br /> - <a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdo.construct.php">PHP: PDO::__construct - Manual</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdo.exec.php">PHP: PDO::exec - Manual</a></p> <h3 id="パラメータをデータベースに保存します"><a href="#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99">パラメータをデータベースに保存します</a></h3> <p>パラメータ送信に応答する機能として、リクエストデータを受け取ってデータベースに保存する処理を追記します。</p> <pre><code class="php">// STEP03 pop-httpでリクエストデータを受け取ります $request = new \Pop\Http\Server\Request(); $params = $request->getParsedData(); $encoded_params = json_encode($params); // STEP03 リクエストデータを保存します $sql = <<< "SQL" INSERT OR REPLACE INTO config(param_id, params) VALUES(1, :params); SQL; $pdo = new PDO('sqlite:example.db'); $sth = $pdo->prepare($sql); $sth->bindParam(':params', $encoded_params); $bool = $sth->execute(); $message = $bool ? '保存しました' : '保存できませんでした'; // STEP02 受信確認メッセージを返します // STEP03 実行結果をメッセージとして返します echo json_encode(['message' => $message]); </code></pre> <p>参考:<br /> - <a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdo.prepare.php">PHP: PDO::prepare - Manual</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdostatement.bindparam.php">PHP: PDOStatement::bindParam - Manual</a><br /> - <a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdostatement.execute.php">PHP: PDOStatement::execute - Manual</a></p> <h3 id="ローカル環境で実行する"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">ローカル環境で実行する</a></h3> <p>/php-rest-app/public/フォルダに移動して、サーバを起動します。</p> <pre><code>php -S localhost:8080 </code></pre> <p>/svelte-rest-app/フォルダに移動してアプリケーションを起動します。</p> <p>SAVEボタンをクリックして、保存しましたメッセージが返ってくれば成功です。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3e8EBrroTKuhBmL4a6O1GMEnnzPT_0uIRlRO6UAMZQ86JQepAQuI6TDH2YmmYBCDCYxWDy_CSvinlRZ1spMDXPdYJCgFQbesRQBQ8-bBEsrdwvhBG-Ba6aHEm7jkWfNwWnbOray_CvmeYVSBBzu8fXI0A=w375-h180-no?authuser=0" alt="STEP03確認画像" /></p> <h3 id="確認"><a href="#%E7%A2%BA%E8%AA%8D">確認</a></h3> <p>サンプルプロジェクトはこういう感じになります。</p> <p>確認:<a target="_blank" rel="nofollow noopener" href="https://github.com/hideki-masuoka/samplecode-svelte-rest-app/tree/Step03">samplecode-svelte-rest-app at Step03</a></p> <h2 id="STEP04 保存したパラメータを取得する"><a href="#STEP04+%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%9F%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B">STEP04 保存したパラメータを取得する</a></h2> <h3 id="取得するパラメータをデータベースの値に切り替えます"><a href="#%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E5%80%A4%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%BE%E3%81%99">取得するパラメータをデータベースの値に切り替えます</a></h3> <p>/php-rest-app/public/index.phpを開きます。</p> <p>パラメータ取得に応答する機能として、データベースから値を取得する機能を追記します。</p> <pre><code class="php">// STEP04 データベースからパラメータを取得します $sql = <<< 'SQL' SELECT param_id, params FROM config WHERE (param_id = 1); SQL; $pdo = new PDO('sqlite:example.db'); $sth = $pdo->prepare($sql); $sth->execute(); $db_data = $sth->fetchColumn(1); // STEP04 取得したパラメータを返します // STEP04 取得した結果がnullのときは、デフォルトデータを返します $params = json_decode($db_data) ?? $params; </code></pre> <p>参考:<a target="_blank" rel="nofollow noopener" href="https://www.php.net/manual/ja/pdostatement.fetchcolumn.php">PHP: PDOStatement::fetchColumn - Manual</a></p> <h3 id="ローカル環境で実行する"><a href="#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">ローカル環境で実行する</a></h3> <p>/php-rest-app/public/フォルダに移動して、サーバを起動します。</p> <pre><code>php -S localhost:8080 </code></pre> <p>/svelte-rest-app/フォルダに移動してアプリケーションを起動します。</p> <p>パラメータを変更してSAVEした後、ブラウザでアプリケーションを再読込します。SAVEしたパラメータが表示されれば成功です。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3c6YqXqBl6y4At1ZGYjEmfmnXfYaxN77JWFwMzKUY9T-UP01OG3FuPh12JUB9PmUPrZVkZbwREZ8E7nqv_-B_hVofU0Cd9usGVDwbQ6E_vyo-D6HKdB8cc4XLRUHzgb-VLTsjX7KcBZMVnexvWz6qwUDw=w383-h292-no?authuser=0" alt="STEP04確認画像" /></p> <h3 id="確認"><a href="#%E7%A2%BA%E8%AA%8D">確認</a></h3> <p>サンプルプロジェクトはこういう感じになります。</p> <p>確認:<a target="_blank" rel="nofollow noopener" href="https://github.com/hideki-masuoka/samplecode-svelte-rest-app/tree/Step04">samplecode-svelte-rest-app at Step04</a></p> <h2 id="STEP05 練習する"><a href="#STEP05+%E7%B7%B4%E7%BF%92%E3%81%99%E3%82%8B">STEP05 練習する</a></h2> <p>これは、ローカル環境で練習するためのサンプルプロジェクトです。<br /> 実際のプロダクトでは、ここで使用したライブラリや手法を自由に扱えるようになるまで練習して得た経験を活用してみてください。</p> fkuMnk tag:crieit.net,2005:PublicArticle/17139 2021-05-17T10:17:20+09:00 2021-05-17T10:17:20+09:00 https://crieit.net/posts/WhenTheComputerBroke 私家版:パソコンがゴェー!となったときに見るページ <h1 id="私家版:パソコンがゴェー!となったときに見るページ"><a href="#%E7%A7%81%E5%AE%B6%E7%89%88%EF%BC%9A%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%8C%E3%82%B4%E3%82%A7%E3%83%BC%EF%BC%81%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E8%A6%8B%E3%82%8B%E3%83%9A%E3%83%BC%E3%82%B8">私家版:パソコンがゴェー!となったときに見るページ</a></h1> <p>システム、コマンド名は思い出せず、</p> <p>ただ、祈るばかりです。</p> <h2 id="SystemRescue"><a href="#SystemRescue">SystemRescue</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.system-rescue.org/">SystemRescue - System Rescue Homepage</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3cZ2M-N66wwWxKGg1jtr8mDyNkT7KcKRr3e0SVCNXw3YNqL6DyHvrTwz7Ej0dLSASu-atwsGx8avXUubJz2PQpyqtvjjZnGP7iHYOrgJWCN8bhasDQ3-ctly-AgS9RKwCGY_Nc10WV_zkV38FsRv5-O5A=w1138-h623-no?authuser=0" alt="SystemRescue Homepage" /></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3ePReT9Be2zzWBO0OUIq6EWotLkOu74VL9KeHkjJzZNylZS12Dhz9Uuuh6AOrOVPwSp3AeXyGQKhH52GLtCgqykADZuJ7qeD93eLb0KgO6DpCRHyBShx0rFm7e8YcElpA7YTPCOs7jqRxA4dlWaTWw6pQ=w1600-h600-no?authuser=0" alt="SystemRescue ScreenShot" /></p> <h2 id="balenaEtcher"><a href="#balenaEtcher">balenaEtcher</a></h2> <p>"Flash OS images to SD cards & USB drives, safely and easily."</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.balena.io/etcher/">balenaEtcher - Flash OS images to SD cards & USB drives</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3fPZYt8zlK3YkpUdyhHdpcQXZ5-dBLPcDrpvFWz3CvrqHWszh1NXeorD8MgcRV4Zl1uAZBRcRoyznjQrETPHPK_cAf5GdddrLve-XK4_aRymIMLk6zlOHbN656uEBZK8JD0GcTzQR26wwGIv9RGmjPSjg=w1138-h623-no?authuser=0" alt="Screen Shot" /></p> <h2 id="Linuxのデバイスを確認するコマンド"><a href="#Linux%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">Linuxのデバイスを確認するコマンド</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.pc-koubou.jp/magazine/36572">Linuxのデバイスを確認するコマンド | パソコン工房 NEXMAG</a></p> <h2 id="Buy"><a href="#Buy">Buy</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://kakaku.com/">価格.com - 「買ってよかった」をすべてのひとに。</a></p> <h2 id="どちらをお使いになりますか?"><a href="#%E3%81%A9%E3%81%A1%E3%82%89%E3%82%92%E3%81%8A%E4%BD%BF%E3%81%84%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F">どちらをお使いになりますか?</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.opensuse.org/">openSUSE - Linux OS. どちらをお使いになりますか?</a></p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>お備え下さい。</p> <p><a target="_blank" rel="nofollow noopener" href="https://rclone.org/">Rclone syncs your files to cloud storage</a></p> fkuMnk tag:crieit.net,2005:PublicArticle/17041 2021-04-30T14:10:13+09:00 2021-04-30T14:10:13+09:00 https://crieit.net/posts/f7bdabfbfedccccc4376c1e4a593ad8f 続・コードを書いてステータス画面を表示する <h1 id="続・コードを書いてステータス画面を表示する"><a href="#%E7%B6%9A%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E7%94%BB%E9%9D%A2%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B">続・コードを書いてステータス画面を表示する</a></h1> <p>※この内容は、2021年5月1日・2日の二日間、Maker Faire Kyoto 2021に併せてオンライン開催される「<a target="_blank" rel="nofollow noopener" href="https://makezine.jp/blog/2021/04/kidsprogramingpark.html">子どもプログラミングパーク</a>」の展示作品の一つとして書かれました。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3d4dByDutes1oinJ9l-X0PCXCdWFkOQIpi8dXojJzUyH-Aql_SlRjX_eb763AqprsXeozc2xQ-8LX0CPeXRwuPHIecWDyxna470CkUE2qRsXBzZvuAy443D0XVQRxtaExo0puazG56j746v7Kj6UBy75w=w1247-h627-no?authuser=0" alt="完成図" /></p> <h2 id="総説"><a href="#%E7%B7%8F%E8%AA%AC">総説</a></h2> <p>これは、Webブラウザに表示されたステータス画面の値を操作する、小さなサンプルコードです。<br /> このガイドテキストに沿ってコードを書き進めていくことで、ステータス画面を作成し、コンフィグ画面でステータスの値を操作することが出来るようになります。</p> <p><strong>サンプルコード:</strong><a target="_blank" rel="nofollow noopener" href="https://codesandbox.io/s/objective-volhard-ktrfs?file=/App.svelte">objective-volhard-ktrfs - CodeSandbox</a></p> <p>このガイドテキストを全て終えたプログラムは下記のようになります。</p> <p><strong>サンプルプログラム:</strong><a target="_blank" rel="nofollow noopener" href="https://svelte.dev/repl/2ad1f0ae67b7406e8beee9a2efbceda3?version=3.37.0">IamStronger • REPL • Svelte</a></p> <h2 id="ガイドテキスト"><a href="#%E3%82%AC%E3%82%A4%E3%83%89%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88">ガイドテキスト</a></h2> <p>このガイドテキストは次の3つのステップの順でコードを書き進めていきます。<br /> - Step.1 ステータス画面を作る<br /> - Step.2 スタイルシートを書く<br /> - Step.3 コンフィグ画面を作る</p> <p>各ステップごとのサンプルコードは、コピーして貼り付けても構いません。コードの内容をよく観察して、それぞれの関係について考えてみてください。</p> <h3 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h3> <p>サンプルコードを開いて、App.svelteファイルが表示されていることを確認します。</p> <p><strong>サンプルコード:</strong><a target="_blank" rel="nofollow noopener" href="https://codesandbox.io/s/objective-volhard-ktrfs?file=/App.svelte">objective-volhard-ktrfs - CodeSandbox</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eMPk7dFEqofdBKktGcLdBM0TjU0IAOG6F0EroSWh7mj14dOwT6iQTrTrsRvTybFs20gt4Oj84hizsSJGn-5uemIY3td8aKGyJfIC3_K9VW-Kh45jhKVRsC0ySI0WW1UtXDpx0thm3lUF8jJC-AoqNrPA=w1587-h484-no?authuser=0" alt="サンプルコードを開いた様子" /></p> <p>今回はこのApp.svelteファイルの25行目から下に書かれている内容を編集します。</p> <pre><code class="html"><!-- Step.1 ここにステータス画面を作ります --> <div class="status-view"> Step.1 ここにステータス画面を作ります </div> <!-- Step.3 スタイルシートを書いたら、ここにコンフィグ画面を作ります --> <div class="status-config"> Step.3 スタイルシートを書いたら、ここにコンフィグ画面を作ります </div> <!-- Step.2 ステータス画面を作ったら、ここにスタイルシートを書きます --> Step.2 ステータス画面を作ったら、ここにスタイルシートを書きます </code></pre> <p><strong>編集したファイルを保存するには、コントロールキーを押しながらSキーを押す【Ctrl+S】か、メニューバーから【File】を選択して【Save】をクリックします。</strong></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3d12KVt26TRFGZAfX6CLsv1hQ6uTXtoSo3hfLTflbRf4y5x-VHu31pqSe8-MnxrTBRPUZq3j5L-C8y03R9bAI7CNCBQRGi2Dsxwj4WdkOSU6rzxN4kqsnxwyIRaXv_-1eZHXhX0bgmA4VnDKbeZliYTuw=w455-h152-no?authuser=0" alt="File Save" /></p> <p><strong>このサンプルコードは自由に編集しても大丈夫です。ページを再読込すると、元の内容に戻ります。</strong></p> <h3 id="Step.1 ステータス画面を作る"><a href="#Step.1+%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E7%94%BB%E9%9D%A2%E3%82%92%E4%BD%9C%E3%82%8B">Step.1 ステータス画面を作る</a></h3> <p>今回の目標はステータス画面を表示して、値を操作することです。</p> <p>まずは、ステータス画面に表示される内容を、HTMLで書きます。</p> <pre><code class="html"><!-- Step.1 ここにステータス画面を作ります --> <div class="status-view"> <div class="status-image"> {name}<br> <img src="/alienYellow.png" alt="character" /> </div> <div class="status-data"> Lv: {lv}<br> HP: {hp}/ {max_hp}<br> MP: {mp}/ {max_mp}<br> <br> AGI: {agi} STR: {str}<br> TEC: {tec} LUC: {luc} </div> <div class="status-text"> {text} </div> </div> </code></pre> <p>もし、ホームページを作ったことがあるなら、このコードを書きながら少し奇妙におもうかもしれません。bodyタグもhtmlタグも無いところに、突然divタグが始まっています。<br /> でも心配はありません。今回はWebアプリケーションを作っています。そして、ここではこういった書き方ができます。</p> <p>サンプルコードを書き終えると、このような画面になります。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eKQjVuaUlGV9OP9RKP9Lg-d4BFmRsAn8xCVjRrM4GINKUWitlpD84zU6EpRCftwtDUxAyxxURcHNmQaDAkktCLwBX0Js0qMILyEV0d58mmVUd3DjhabemQKIoqL20REmwTudx9ow5uP2cLaU_tLArBTQ=w815-h440-no?authuser=0" alt="Step.1の確認" /></p> <h3 id="Step.2 スタイルシートを書く"><a href="#Step.2+%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E6%9B%B8%E3%81%8F">Step.2 スタイルシートを書く</a></h3> <p>今回の目標はステータス画面を表示して、値を操作することです。</p> <p>ステータス画面が、ステータス画面として見やすくなるように、スタイルシートで見た目を整える事ができます。</p> <p>次のコードを、ファイルの一番下に書きます。</p> <pre><code class="css"><!-- Step.2 ステータス画面を作ったら、ここにスタイルシートを書きます --> <style> .status-view { width: 320px; height: 240px; margin: 2em auto; padding: 1em; background-color: blue; color: white; display: flex; flex-wrap: wrap; text-shadow: 1px 1px black; font-family: monospace; font-size: 16px; } .status-image { width: 128px; } .status-data { flex-grow: 1; padding-left: 1em; } .status-text { width: 100%; padding: 0.5em; border: 2px ridge white; overflow: hidden; } img { display: block; margin: auto; } .status-config { width: 320px; margin: 1em auto 2em; padding: 1em; border: 1px solid black; line-height: 2em; } </style> </code></pre> <p>もし、ホームページを作ったことがあるなら、このコードを書きながら少し奇妙におもうかもしれません。ファイルの一番下に突然スタイルシートを書き始めて、cssファイルも読み込みません。</p> <p>でも心配はありません。今回はWebアプリケーションを作っています。そして、ここではこういった書き方ができます。</p> <p>サンプルコードを書き終えると、このような画面になります。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eoR1XuNMbhWKQ2VqmRc9SDAUwNkgACF1e5aAvelgtTwfD6Q1s7WCInLFy-6E6RnNwak5uiXB7PDl4UPC6TWefO5gYM5E3LkchmC8nAv-oYuYWgY2ie1dilhsVSRtqpezh7s2QCWqUFT3jHO0bzwwTWRQ=w1100-h440-no?authuser=0" alt="Step.2の確認" /></p> <h3 id="Step.3 コンフィグ画面を作る"><a href="#Step.3+%E3%82%B3%E3%83%B3%E3%83%95%E3%82%A3%E3%82%B0%E7%94%BB%E9%9D%A2%E3%82%92%E4%BD%9C%E3%82%8B">Step.3 コンフィグ画面を作る</a></h3> <p>今回の目標はステータス画面を表示して、値を操作することです。</p> <p>作成したステータス画面の値を操作するために、コンフィグ画面を作ります。</p> <pre><code class="html"><!-- Step.3 スタイルシートを書いたら、ここにコンフィグ画面を作ります --> <div class="status-config"> config<br> name : <input type="text" maxlength="16" bind:value="{name}" /> <br> Lv : <input type="number" min="1" max="99" bind:value="{lv}" /> <br> hp: <input type="number" min="0" max="{max_hp}" bind:value={hp} /> mp: <input type="number" min="0" max="{max_mp}" bind:value={mp} /> <br> AGI: <input type="number" min="1" max="99" bind:value={agi} /> STR: <input type="number" min="1" max="99" bind:value={str} /> <br> TEC: <input type="number" min="1" max="99" bind:value={tec} /> LUC: <input type="number" min="1" max="99" bind:value={luc} /> <br> text : <br> <textarea bind:value="{text}"></textarea> </div> </code></pre> <p>もし、ホームページを作ったことがあるなら、このコードを書きながら少し奇妙におもうかもしれません。formタグもbuttonタグも無いし、valueの内容と画面に表示されている内容もぜんぜん違います。</p> <p>でも心配はありません。今回はWebアプリケーションを作っています。そして、ここではこういった書き方ができます。</p> <p>サンプルコードを書き終えると、このような画面になります。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3euAKSF1AWjs9Y6JtzQ8-8a0g7nwpUY6KIce6UP7hGjMJFsqWHDGTXl-irup3qiw5TJZIwOJ5CNEU_z3Rxu2HyHNfjEuu6rmarBx28D2XH-uDFy-4R-YARzp65ULouny3zGScoSgD1QYnPPmj7kHzP8CA=w1100-h451-no?authuser=0" alt="Step.3の確認" /></p> <h3 id="レッツプレイ 観察タイム"><a href="#%E3%83%AC%E3%83%83%E3%83%84%E3%83%97%E3%83%AC%E3%82%A4+%E8%A6%B3%E5%AF%9F%E3%82%BF%E3%82%A4%E3%83%A0">レッツプレイ 観察タイム</a></h3> <p>今回の目標はステータス画面を表示して、値を操作することです。</p> <p>そして、これまでの3つのステップで、この目標は達成されました。</p> <p>コンフィグ画面の値を操作して、ステータス画面の変化を確認してみてください。</p> <h3 id="ドキドキ 改造タイム"><a href="#%E3%83%89%E3%82%AD%E3%83%89%E3%82%AD+%E6%94%B9%E9%80%A0%E3%82%BF%E3%82%A4%E3%83%A0">ドキドキ 改造タイム</a></h3> <p>今回書いたコードをおさらいします。</p> <pre><code class="html"><!-- Step.1 ここにステータス画面を作ります --> <div class="status-view"> <div class="status-image"> {name}<br> <img src="/alienYellow.png" alt="character" /> </div> <div class="status-data"> Lv: {lv}<br> HP: {hp}/ {max_hp}<br> MP: {mp}/ {max_mp}<br> <br> AGI: {agi} STR: {str}<br> TEC: {tec} LUC: {luc} </div> <div class="status-text"> {text} </div> </div> <!-- Step.3 スタイルシートを書いたら、ここにコンフィグ画面を作ります --> <div class="status-config"> config<br> name : <input type="text" maxlength="16" bind:value="{name}" /> <br> Lv : <input type="number" min="1" max="99" bind:value="{lv}" /> <br> hp: <input type="number" min="0" max="{max_hp}" bind:value={hp} /> mp: <input type="number" min="0" max="{max_mp}" bind:value={mp} /> <br> AGI: <input type="number" min="1" max="99" bind:value={agi} /> STR: <input type="number" min="1" max="99" bind:value={str} /> <br> TEC: <input type="number" min="1" max="99" bind:value={tec} /> LUC: <input type="number" min="1" max="99" bind:value={luc} /> <br> text : <br> <textarea bind:value="{text}"></textarea> </div> <!-- Step.2 ステータス画面を作ったら、ここにスタイルシートを書きます --> <style> .status-view { width: 320px; height: 240px; margin: 2em auto; padding: 1em; background-color: blue; color: white; display: flex; flex-wrap: wrap; text-shadow: 1px 1px black; font-family: monospace; font-size: 16px; } .status-image { width: 128px; } .status-data { flex-grow: 1; padding-left: 1em; } .status-text { width: 100%; padding: 0.5em; border: 2px ridge white; overflow: hidden; } img { display: block; margin: auto; } .status-config { width: 320px; margin: 1em auto 2em; padding: 1em; border: 1px solid black; line-height: 2em; } </style> </code></pre> <p>思いつく限り、自由に改造してみてください。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3cmelku4N_7I29oP7zHRqHVEvKU11H0ZY-TAcx_gueIzuQf3fiGDUe-Lb6Wp8TzBDo6aBhzyBUpDAgQB8e5XjWV1p0O8OyZr_10JvrDlnvRcggRj-BNKUJiWNfpOlXsjbDgbnu1VEG5aQ2vBjlbcF0TzA=w412-h660-no?authuser=0" alt="完成図" /></p> <h2 id="解説 Webアプリケーション フレームワーク"><a href="#%E8%A7%A3%E8%AA%AC+Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF">解説 Webアプリケーション フレームワーク</a></h2> <p>このサンプルコードはHTMLとCSSで書かれていますが、プログラム全体ではWebアプリケーションフレームワーク「Svelte」を使用しています。</p> <p>App.svelteファイルの構成は、上から順に、JavaScript、HTML、CSSとなっており、一つのファイルの中に必要な機能と要素そしてスタイルをまとめて書くことが出来ます。</p> <p>今回使用したSvelteには、実際に入力した内容を確かめながら学ぶことができるチュートリアルが用意されています。説明は英語ですが、短文で簡潔にまとめられているのでGoogle翻訳などで読んでも理解しやすい内容になっています。<br /> このサンプルプログラムで興味をもったら、ぜひ試してみて下さい。</p> <p>Hello world から始まります。</p> <p><a target="_blank" rel="nofollow noopener" href="https://svelte.dev/tutorial/basics">Introduction / Basics • Svelte Tutorial</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3dyxjVh-Mt7ctmOAcQSv8CUTp31Fi-UkyfKzez43eCdm-VPHxMQsvZg4ffNQghE4fglG0cYYxuFC4DZLzLCnBeoeu0_xCrjmE6lH6L8TFkRXzSHNdJ3e-TPJYmKy12wINkNYiXE-fJ-sKpe5ZJJLIHbXg=w1231-h604-no?authuser=0" alt="Svelte Tutorial" /></p> <p>今回使用したSvelteの他にも、世界では様々なWebアプリケーションフレームワークが日々改良を重ねています。</p> <p>いますぐ自由に使えるものもいくつかありますので、実際に触って試してみて、自分にあったWebアプリケーションフレームワークを見つけてみてください。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://svelte.dev/">Svelte • Cybernetically enhanced web apps</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://ja.reactjs.org/">React – ユーザインターフェース構築のための JavaScript ライブラリ</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://v3.ja.vuejs.org/">Vue.js</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://angular.jp/">Angular 日本語ドキュメンテーション</a></li> </ul> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eQgVossbbmqlIJh0rqXIiiiQJan15IMIu2qv2x3LtCSRyIjIbYK6iAHtzXkxeXPqDNMT0gWt-KBRppybfCGyg5EYXCEku6TAEhRCr3gBDcBOlb5IQwysfCfjEKvpi3U4OfqPpkWeJX95CwRLVeZ-vj8Q=w1260-h685-no?authuser=0" alt="Svelte Web site" /></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3djcsyBB1wYWzQL1wIi2ZtJYrC0Dz_BcvFGSXFWgdR5euxoI7tJSwhdS4BrU2tIQeHCl1b5bECB8Zn0jcJ_p_xPiKyvMlLMdJ41jT_nSZ7qXge6vejsqkA-CE_U84aALjXUkoYNGJgNEHuvPRWjBDjH-w=w1260-h685-no?authuser=0" alt="React Web site" /></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eaKq3uLZ1w7Id0_EbtmcdzpT9SKHCmg6i38oKY4z7ooq74zC5MMyzkiJJfuGg3T3sbfAiPYTwGByDbmJk7CXj55-PQUMtojmWC6suHVMoIHxQjUpw6PFys3SLoqLjBWPZlYrqtOwRj7gDmmr8C91N98Q=w1260-h685-no?authuser=0" alt="Vue.js Web site" /></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3da_cge23AaD0w54ecV-Y45UAWFAPBNuCOXOxBsVNkpZjVdyOxLCQQhcMdfsb6GiIWMZF9ESbB36gWm1xPLWs67aD1kKBiPABY1KGT6dXSD-TIxOA-frjVrjebO-QNm1suIRKEdDKijrylWuSGZAC3NMg=w1260-h685-no?authuser=0" alt="Angular Web site" /></p> fkuMnk tag:crieit.net,2005:PublicArticle/17033 2021-04-30T00:55:12+09:00 2021-04-30T00:55:12+09:00 https://crieit.net/posts/55692a63edb51cd80fc791314b3af2f7 真・コードを書いて画面内のキャラクターを動かす <h1 id="真・コードを書いて画面内のキャラクターを動かす"><a href="#%E7%9C%9F%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E7%94%BB%E9%9D%A2%E5%86%85%E3%81%AE%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99">真・コードを書いて画面内のキャラクターを動かす</a></h1> <p>※この内容は、2021年5月1日・2日の二日間、Maker Faire Kyoto 2021に併せてオンライン開催される「<a target="_blank" rel="nofollow noopener" href="https://makezine.jp/blog/2021/04/kidsprogramingpark.html">子どもプログラミングパーク</a>」の展示作品の一つとして書かれました。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3f6Al43kXGcZgZ0JN6NUQ2m-iOL-UF4E2KJPvnad-jcrcaX5MKHzxeYF9RLCL3Wy9cQyqEqcrjnU5ypLIevbeZP76hMyalwIeRq_6B6Xlxa5AQt6GWvrKzxFv2jr2JUY5ZT7XjFcWrZz0Kt8B9Ny8gTAg=w1236-h544-no?authuser=0" alt="サンプルコード入力画面" /></p> <h2 id="総説"><a href="#%E7%B7%8F%E8%AA%AC">総説</a></h2> <p>これは、Webブラウザに表示されたキャラクターを動かすための小さなサンプルコードです。<br /> このガイドテキストに沿ってコードを書き進めていくことで、画面上のキャラクターをキーボードで操作することが出来るようになります。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3f-7VNyfX0w0_7F-hgAMak3Ydb7lLEipwLtGqVqxPlsNUT7Uquf0nW7V9FGAB48XD0vXhlyOAkpfLDigKrrI7F5epLNK5f5f43-PeE7YLVNWW3N0nK7B60AyHQ6u8ex5isurJDyD0AEhuH7hp1rnIZf7A=w1151-h435-no?authuser=0" alt="ガイドテキストのプレビュー画像" /></p> <p><strong>ガイドテキスト:</strong><a href="https://crieit.net/posts/e64ed0d400c27da8af1ef756a0b49255">コードを書いて画面内のキャラクターを動かす</a></p> <p>このガイドテキストを全て終えたプログラムは下記のようになります。</p> <p><strong>サンプルプログラム:</strong><a target="_blank" rel="nofollow noopener" href="https://codesandbox.io/s/interesting-river-zyxg8?file=/src/Game.js">interesting-river-zyxg8 - CodeSandbox</a></p> <h2 id="解説・其の一 フレームワークの助けを借りる"><a href="#%E8%A7%A3%E8%AA%AC%E3%83%BB%E5%85%B6%E3%81%AE%E4%B8%80+%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E5%8A%A9%E3%81%91%E3%82%92%E5%80%9F%E3%82%8A%E3%82%8B">解説・其の一 フレームワークの助けを借りる</a></h2> <p>このサンプルコードはJavaScriptで書かれていますが、プログラム全体はHTML5のゲームフレームワーク「Phaser 3」を使用しています。</p> <p>ここでは、キャラクターを操作するために <strong>player.setVelocityX</strong> や、<strong>player.anims.play</strong> を使いました。<br /> これらはこの「Phaser 3」が持つ機能で、ゲームを開発するために必要な様々な機能が予め用意されています。</p> <p>このようなフレームワーク、ゲームに特化したものは特にゲームエンジンとも呼ばれており、著名なものではUnityやアンリアルエンジンといったものが挙げられます。<br /> このサンプルプログラムでは「Phaser 3」を使いましたが、世界にはまだまだ様々なゲームエンジンが存在しています。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3claocW79ey_x8gsxd6y7rA2McSzNXE8FNGZ_--66lJK0JNAkK_ajgkikylO614OkkgOV5kFyL26ew4UQ-5rjOqhSblmKty4HsTVrDW4GcLJkeRtulhKwNgyswpVkCu4Y_8FZ6lE5EFDz_0DRD8fuAHGA=w1259-h688-no?authuser=0" alt="Phaser 3 Web site" /></p> <p>いますぐ自由に使えるものもいくつかありますので、実際に触って試してみて、自分にあったゲームエンジンを見つけてみてください。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://phaser.io/">Phaser - A fast, fun and free open source HTML5 game framework</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://godotengine.org/">Godot Engine - Free and open source 2D and 3D game engine</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://gdevelop-app.com/ja/">GDevelopでプログラミング不要なゲーム製作 - HTML5/ネイティブゲームをクリエイトするオープンソースソフトウェア</a></li> </ul> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3cgyTGAgreYvwaBHB7cCRNsLonUzm0-FIGlLT9CXqk-G0AsxufWCYY_1oH8oEYmsgiMy6nA6YpyxNF7hl-PjA0-H0Sng6RteFiGt1EI2ujk5g9KiP1yCrDXecnloDl-MjAUTwRwhntP_2zbTq18IsCATQ=w1259-h688-no?authuser=0" alt="Godot Web site" /><br /> <img src="https://lh3.googleusercontent.com/pw/ACtC-3ciSIQFYeqZzia_T1yv1AZ-9h-7YGkuzkXfIF8VUX_H10iNRvqdjGCmCUNtR0ADB7EGf5d6HlXaypR5GJFroFnp8_goDIdE8zz2hwir7kj9jx_Zemgt9P7SGPo9Lc8GzNnUpDzGNT-gS0Y8Wzv4IE0C1w=w1259-h688-no?authuser=0" alt="GDevelop Web site" /></p> <h2 id="解説・其の二 オンラインコードエディタを使う"><a href="#%E8%A7%A3%E8%AA%AC%E3%83%BB%E5%85%B6%E3%81%AE%E4%BA%8C+%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E4%BD%BF%E3%81%86">解説・其の二 オンラインコードエディタを使う</a></h2> <p>このサンプルコードでは、Webブラウザに表示されたコードを編集してその場で実行結果を見ることが出来ました。</p> <p>これは、オンラインコードエディタやオンラインテキストエディタなどと呼ばれているサービスで、ここでは「CodeSandbox」を使用しています。<br /> <img src="https://lh3.googleusercontent.com/pw/ACtC-3enUS3IPxGVoas_6DvxsK3eOrFSx-bcMgp6RWaZf-3chqD2ic3_rNn5q23VDElcS_-fuGJjFam_s1dDOR-mk5E4dYCA9zDdrr_TVrDyxGKErLpsjGPRQUsoafpelsZX3Kua1ryIxTxfVzFbtlo9J5j-mw=w1259-h688-no?authuser=0" alt="CodeSandbox Web site" /></p> <p>オンラインコードエディタは、使用しているコンピュータに関係なくWebブラウザがあればコードを書いて実行することができます。自分でプログラミング環境を準備出来ない間は、このオンラインコードエディタで練習してみるのも良いと思います。</p> <p>また、自分の書いたコードをScratchと同じように、動く状態で公開することが出来るので、誰かに自慢したり相談したり、一緒にコードを書いていくことが出来るようになります。身近に誰もいなくても、世界にはたくさんすごいのがいますからね。</p> <p>すぐに使い始められるものを、いくつかここに紹介しておきました。実際にさわって確かめてみてください。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://codesandbox.io/">CodeSandbox: Online Code Editor and IDE for Rapid Web Development</a> <ul> <li>今回使用したものです。HTML5やJavaScriptのコードを書くことができます。</li> </ul></li> <li><a target="_blank" rel="nofollow noopener" href="https://trinket.io/">Trinket</a> <ul> <li>CoderDojoのチュートリアルKataなどでよく使われているものです。PythonやJavaScriptのコードを書くことができます。※今回のサンプルコードはここでは動きませんでした。</li> </ul></li> <li><a target="_blank" rel="nofollow noopener" href="https://codepen.io/">CodePen: Online Code Editor and Front End Web Developer Community</a> <ul> <li>JavaScriptフレームワークやFlutterなどのコードを書くことができます。</li> </ul></li> </ul> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3eZRE2WJvlH9GuEj1FxHyDriIND2tTyiL8qZ0GYfwXXkc5nJc-toNsHYCF7kLKJqth3U2Kwnz2wHh0hLl1OfIL8I3l_8m4g0ISjpNiMyy3mnVsTIAPSTHPzPtNn_3cvcpKsANW5DW3i_j6k_MWGHWtyJg=w1259-h688-no?authuser=0" alt="Trinket Web site" /><br /> <img src="https://lh3.googleusercontent.com/pw/ACtC-3dJH11kmSPTeBK7qWfA46_1WqMENQJ12Gy6edj7_6tpQ1uVMAM39OwjceSclB5yklsEZf17BL77X_m_cam_5WG3LCcZMs6Q-qCTb5oT_HlHOkwWmnzUmmyubrQDFygFRRbVA8weCS0Jx-QOORnZ0_uUvQ=w1259-h688-no?authuser=0" alt="CodePen Web site" /></p> fkuMnk tag:crieit.net,2005:PublicArticle/16838 2021-04-11T20:39:55+09:00 2021-04-11T20:42:09+09:00 https://crieit.net/posts/e64ed0d400c27da8af1ef756a0b49255 コードを書いて画面内のキャラクターを動かす <h1 id="コードを書いて画面内のキャラクターを動かす"><a href="#%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E7%94%BB%E9%9D%A2%E5%86%85%E3%81%AE%E3%82%AD%E3%83%A3%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99">コードを書いて画面内のキャラクターを動かす</a></h1> <p>これは、Webブラウザに表示されているキャラクターをキーボードで操作するためのプログラムを書く、練習用のサンプルコードです。</p> <p>Phaser3というHTML5のゲームフレームワークを使用してJavaScriptの条件分岐コードを書きます。</p> <p>この内容は、Phaser3の公式チュートリアルを一部抜粋し、5月にオンライン開催が予定されている子どもプログラミング喫茶のメニュー向けに再編集されました。</p> <h2 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="http://phaser.io/tutorials/making-your-first-phaser-3-game/part1">Making your first Phaser 3 game: Part 1 - Introduction - Learn - Phaser</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://makezine.jp/event/makers-mfk2021/m0005/">子どもプログラミング喫茶 | Maker Faire Kyoto 2021 | Make: Japan</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://makezine.jp/event/mfk2021/">2021年5月1日(土)、2日(日)Maker Faire Kyoto 2021 | Make: Japan</a></li> </ul> <h2 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h2> <p>CodeSandboxにあるサンプルコードを、Webブラウザで開いて編集します。</p> <p>【サンプルコード】<a target="_blank" rel="nofollow noopener" href="https://codesandbox.io/s/silent-frost-z6iw0?file=/src/Game.js">silent-frost-z6iw0 - CodeSandbox</a></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3f6Al43kXGcZgZ0JN6NUQ2m-iOL-UF4E2KJPvnad-jcrcaX5MKHzxeYF9RLCL3Wy9cQyqEqcrjnU5ypLIevbeZP76hMyalwIeRq_6B6Xlxa5AQt6GWvrKzxFv2jr2JUY5ZT7XjFcWrZz0Kt8B9Ny8gTAg=w1236-h544-no?authuser=0" alt="CodeSandbox" /></p> <p>Game.jsファイルが表示されていることを確認します。</p> <p>今回は、このGame.jsファイルの一番下に書かれているupdate()関数の内容を編集します。</p> <pre><code class="javascript">update() { // レシピ Start // 1.もしカーソルキーの左が押されたら if (this.cursors.left.isDown) { // 1.1. プレイヤーが移動するためにX座標への速度を減らしたい // 1.2. プレイヤーが左に歩くアニメーションを付けたい } // 2. もし左ではなくカーソルキーの右が押されたら // 2.1. プレイヤーが移動するためにX座標への速度を増やしたい // 2.2. プレイヤーが右に歩くアニメーションを付けたい // 3. 何も押されていないときには // 3.1. プレイヤーが停止するためにX座標への速度を無くしたい // 3.2. プレイヤーが止まるアニメーションを付けたい // 4. もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら // 4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい // レシピ END } </code></pre> <p><strong>編集したファイルを保存するには、コントロールキーを押しながらSキーを押す【Ctrl+S】か、メニューバーから【File】を選択して【Save】をクリックします。</strong></p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3d12KVt26TRFGZAfX6CLsv1hQ6uTXtoSo3hfLTflbRf4y5x-VHu31pqSe8-MnxrTBRPUZq3j5L-C8y03R9bAI7CNCBQRGi2Dsxwj4WdkOSU6rzxN4kqsnxwyIRaXv_-1eZHXhX0bgmA4VnDKbeZliYTuw=w455-h152-no?authuser=0" alt="File Save" /></p> <p><strong>このサンプルコードは自由に編集しても大丈夫です。ページを再読込すると、元の内容に戻ります。</strong></p> <h2 id="レシピ"><a href="#%E3%83%AC%E3%82%B7%E3%83%94">レシピ</a></h2> <ul> <li>1.もしカーソルキーの左が押されたら <ul> <li>1.1. プレイヤーが移動するためにX座標への速度を減らしたい</li> <li>1.2. プレイヤーが左に歩くアニメーションを付けたい</li> <li>1.3 コーディング観察タイム</li> </ul></li> <li><ol start="2"> <li>もし左ではなくカーソルキーの右が押されたら</li> </ol> <ul> <li>2.1. プレイヤーが移動するためにX座標への速度を増やしたい</li> <li>2.2. プレイヤーが右に歩くアニメーションを付けたい</li> <li>2.3 コーディング観察タイム</li> </ul></li> <li><ol start="3"> <li>何も押されていないときには</li> </ol> <ul> <li>3.1. プレイヤーが停止するためにX座標への速度を無くしたい</li> <li>3.2. プレイヤーが止まるアニメーションを付けたい</li> <li>3.3 コーディング観察タイム</li> </ul></li> <li><ol start="4"> <li>もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら</li> </ol> <ul> <li>4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい</li> <li>4.2 コーディング観察タイム</li> </ul></li> <li><ol start="5"> <li>改造タイム</li> </ol></li> </ul> <h3 id="1.もしカーソルキーの左が押されたら"><a href="#1.%E3%82%82%E3%81%97%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%AD%E3%83%BC%E3%81%AE%E5%B7%A6%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89">1.もしカーソルキーの左が押されたら</a></h3> <p><strong>if (this.cursors.left.isDown)</strong></p> <p>今回の目標は、画面に表示されているプレイヤーを動かすことです。</p> <p>もし、カーソルキーの左【this.cursors.left】が、押されたら【isDown】...</p> <h4 id="1.1. プレイヤーが移動するためにX座標への速度を減らしたい"><a href="#1.1.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABX%E5%BA%A7%E6%A8%99%E3%81%B8%E3%81%AE%E9%80%9F%E5%BA%A6%E3%82%92%E6%B8%9B%E3%82%89%E3%81%97%E3%81%9F%E3%81%84">1.1. プレイヤーが移動するためにX座標への速度を減らしたい</a></h4> <p><strong>this.player.setVelocityX(-160);</strong></p> <p>プレイヤー【this.player】を左に移動させたいので、</p> <p>X座標への速度【setVelocityX】を、減らします【(-160)】</p> <h4 id="1.2. プレイヤーが左に歩くアニメーションを付けたい"><a href="#1.2.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E5%B7%A6%E3%81%AB%E6%AD%A9%E3%81%8F%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BB%98%E3%81%91%E3%81%9F%E3%81%84">1.2. プレイヤーが左に歩くアニメーションを付けたい</a></h4> <p><strong>this.player.anims.play('left', true);</strong></p> <p>プレイヤー【this.player】に、</p> <p>アニメーションを付けます【anims.play】</p> <p>左に歩くときの【('left', true)】</p> <h4 id="1.3 コーディング観察タイム"><a href="#1.3+%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%B3%E5%AF%9F%E3%82%BF%E3%82%A4%E3%83%A0">1.3 コーディング観察タイム</a></h4> <p>コードを書いて動きを観察します。</p> <p><strong>編集したファイルを保存するには、コントロールキーを押しながらSキーを押す【Ctrl+S】か、メニューバーから【File】を選択して【Save】をクリックします。</strong></p> <pre><code class="javascript">// 1.もしカーソルキーの左が押されたら if (this.cursors.left.isDown) { // 1.1. プレイヤーが移動するためにX座標への速度を減らしたい this.player.setVelocityX(-160); // 1.2. プレイヤーが左に歩くアニメーションを付けたい this.player.anims.play('left', true); } </code></pre> <h3 id="2. もし左ではなくカーソルキーの右が押されたら"><a href="#2.+%E3%82%82%E3%81%97%E5%B7%A6%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%AD%E3%83%BC%E3%81%AE%E5%8F%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89">2. もし左ではなくカーソルキーの右が押されたら</a></h3> <p><strong>else if (this.cursors.right.isDown)</strong></p> <p>今回の目標は、画面に表示されているプレイヤーを動かすことです。</p> <p>もし左ではなく、カーソルキーの右【this.cursors.right】が、押されたら【isDown】...</p> <h4 id="2.1. プレイヤーが移動するためにX座標への速度を増やしたい"><a href="#2.1.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E7%A7%BB%E5%8B%95%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABX%E5%BA%A7%E6%A8%99%E3%81%B8%E3%81%AE%E9%80%9F%E5%BA%A6%E3%82%92%E5%A2%97%E3%82%84%E3%81%97%E3%81%9F%E3%81%84">2.1. プレイヤーが移動するためにX座標への速度を増やしたい</a></h4> <p><strong>this.player.setVelocityX(160);</strong></p> <p>プレイヤー【this.player】を右に移動させたいので、</p> <p>X座標への速度【setVelocityX】を、増やします【(160)】</p> <h4 id="2.2. プレイヤーが右に歩くアニメーションを付けたい"><a href="#2.2.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E5%8F%B3%E3%81%AB%E6%AD%A9%E3%81%8F%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BB%98%E3%81%91%E3%81%9F%E3%81%84">2.2. プレイヤーが右に歩くアニメーションを付けたい</a></h4> <p><strong>this.player.anims.play('right', true);</strong></p> <p>プレイヤーに、アニメーションを付けます【anims.play】</p> <p>右に歩くときの【('right', true)】</p> <h4 id="2.3 コーディング観察タイム"><a href="#2.3+%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%B3%E5%AF%9F%E3%82%BF%E3%82%A4%E3%83%A0">2.3 コーディング観察タイム</a></h4> <p>コードを書いて動きを観察します。</p> <pre><code class="javascript">// 2. もし左ではなくカーソルキーの右が押されたら else if (this.cursors.right.isDown) { // 2.1. プレイヤーが移動するためにX座標への速度を増やしたい this.player.setVelocityX(160); // 2.2. プレイヤーが右に歩くアニメーションを付けたい this.player.anims.play('right', true); } </code></pre> <h3 id="3. 何も押されていないときには"><a href="#3.+%E4%BD%95%E3%82%82%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AB%E3%81%AF">3. 何も押されていないときには</a></h3> <p><strong>else</strong></p> <p>今回の目標は、画面に表示されているプレイヤーを動かすことです。</p> <p>ただし、左も右も押されていないとき【else】には...</p> <h4 id="3.1. プレイヤーが停止するためにX座標への速度を無くしたい"><a href="#3.1.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%ABX%E5%BA%A7%E6%A8%99%E3%81%B8%E3%81%AE%E9%80%9F%E5%BA%A6%E3%82%92%E7%84%A1%E3%81%8F%E3%81%97%E3%81%9F%E3%81%84">3.1. プレイヤーが停止するためにX座標への速度を無くしたい</a></h4> <p><strong>this.player.setVelocityX(0);</strong></p> <p>プレイヤーを停止させたいので、X座標への速度を無くします【(0)】。</p> <h4 id="3.2. プレイヤーが止まるアニメーションを付けたい"><a href="#3.2.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E6%AD%A2%E3%81%BE%E3%82%8B%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BB%98%E3%81%91%E3%81%9F%E3%81%84">3.2. プレイヤーが止まるアニメーションを付けたい</a></h4> <p><strong>this.player.anims.play('turn');</strong></p> <p>プレイヤーに、アニメーションを付けます。止まるときの【('turn')】</p> <h4 id="3.3 コーディング観察タイム"><a href="#3.3+%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%B3%E5%AF%9F%E3%82%BF%E3%82%A4%E3%83%A0">3.3 コーディング観察タイム</a></h4> <p>コードを書いて動きを観察します。</p> <pre><code class="javascript">// 3. 何も押されていないときには else { // 3.1. プレイヤーが停止するためにX座標への速度を無くしたい this.player.setVelocityX(0); // 3.2. プレイヤーが止まるアニメーションを付けたい this.player.anims.play('turn'); } </code></pre> <h3 id="4. もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら"><a href="#4.+%E3%82%82%E3%81%97%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%AD%E3%83%BC%E3%81%AE%E4%B8%8A%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%E3%80%81%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E5%9C%B0%E9%9D%A2%E3%81%AB%E3%81%84%E3%82%8B%E3%81%AA%E3%82%89">4. もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら</a></h3> <p><strong>if (this.cursors.up.isDown && this.player.body.touching.down)</strong></p> <p>今回の目標は、画面に表示されているプレイヤーを動かすことです。</p> <p>もしカーソルキーの上が押されたとき【this.cursors.up.isDown】、【&&】</p> <p>プレイヤーが地面にいるなら【this.player.body.touching.down】…</p> <h4 id="4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい"><a href="#4.1.+%E3%83%97%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%97%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%80%81Y%E5%BA%A7%E6%A8%99%E3%81%B8%E3%81%AE%E9%80%9F%E5%BA%A6%E3%82%92%E6%B8%9B%E3%82%89%E3%81%97%E3%81%9F%E3%81%84">4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい</a></h4> <p><strong>this.player.setVelocityY(-330);</strong></p> <p>プレイヤーをジャンプさせたいので、</p> <p>Y座標への速度を【setVelocityY】減らします【(-330)】</p> <h4 id="4.2 コーディング観察タイム"><a href="#4.2+%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%B3%E5%AF%9F%E3%82%BF%E3%82%A4%E3%83%A0">4.2 コーディング観察タイム</a></h4> <p>コードを書いて動きを観察します。</p> <pre><code class="javascript">// 4. もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら if (this.cursors.up.isDown && this.player.body.touching.down) { // 4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい this.player.setVelocityY(-330); } </code></pre> <h3 id="5. 改造タイム"><a href="#5.+%E6%94%B9%E9%80%A0%E3%82%BF%E3%82%A4%E3%83%A0">5. 改造タイム</a></h3> <p>今回書いたコードをおさらいします。</p> <pre><code class="javascript">// 1.もしカーソルキーの左が押されたら if (this.cursors.left.isDown) { // 1.1. プレイヤーが移動するためにX座標への速度を減らしたい this.player.setVelocityX(-160); // 1.2. プレイヤーが左に歩くアニメーションを付けたい this.player.anims.play('left', true); } // 2. もし左ではなくカーソルキーの右が押されたら else if (this.cursors.right.isDown) { // 2.1. プレイヤーが移動するためにX座標への速度を増やしたい this.player.setVelocityX(160); // 2.2. プレイヤーが右に歩くアニメーションを付けたい this.player.anims.play('right', true); } // 3. 何も押されていないときには else { // 3.1. プレイヤーが停止するためにX座標への速度を無くしたい this.player.setVelocityX(0); // 3.2. プレイヤーが止まるアニメーションを付けたい this.player.anims.play('turn'); } // 4. もしカーソルキーの上が押されたとき、プレイヤーが地面にいるなら if (this.cursors.up.isDown && this.player.body.touching.down) { // 4.1. プレイヤーがジャンプするために、Y座標への速度を減らしたい this.player.setVelocityY(-330); } </code></pre> <p>思いつく限り、自由に改造してみてください。</p> fkuMnk tag:crieit.net,2005:PublicArticle/16830 2021-04-10T08:39:11+09:00 2021-04-10T08:39:11+09:00 https://crieit.net/posts/rest-heroku-popcorn 世界に貴方だけのとびっきりのわがままREST-API <h1 id="世界に貴方だけのとびっきりのわがままREST-API"><a href="#%E4%B8%96%E7%95%8C%E3%81%AB%E8%B2%B4%E6%96%B9%E3%81%A0%E3%81%91%E3%81%AE%E3%81%A8%E3%81%B3%E3%81%A3%E3%81%8D%E3%82%8A%E3%81%AE%E3%82%8F%E3%81%8C%E3%81%BE%E3%81%BEREST-API">世界に貴方だけのとびっきりのわがままREST-API</a></h1> <p>以下、本質情報になります。</p> <h2 id="1,これを読みます。"><a href="#%EF%BC%91%EF%BC%8C%E3%81%93%E3%82%8C%E3%82%92%E8%AA%AD%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82">1,これを読みます。</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/popphp/popcorn">popphp/popcorn: Popcorn PHP REST Micro-Framework</a></p> <h2 id="2,これをします。"><a href="#%EF%BC%92%EF%BC%8C%E3%81%93%E3%82%8C%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82">2,これをします。</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://devcenter.heroku.com/ja/articles/deploying-php">Heroku での PHP アプリのデプロイ | Heroku Dev Center</a></p> <h2 id="3,できます。"><a href="#%EF%BC%93%EF%BC%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82">3,できます。</a></h2> <p><img src="https://pbs.twimg.com/media/EyibKPHVcAIYlof?format=png&name=900x900" alt="牛です" /></p> <h2 id="おわります"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99">おわります</a></h2> fkuMnk tag:crieit.net,2005:PublicArticle/16787 2021-03-28T20:51:03+09:00 2021-03-28T20:51:03+09:00 https://crieit.net/posts/PHPerKaigi 知らん人と話す話・PHPerKaigi編 <h1 id="知らん人と話す話・PHPerKaigi編"><a href="#%E7%9F%A5%E3%82%89%E3%82%93%E4%BA%BA%E3%81%A8%E8%A9%B1%E3%81%99%E8%A9%B1%E3%83%BBPHPerKaigi%E7%B7%A8">知らん人と話す話・PHPerKaigi編</a></h1> <p>金曜日から三日間、知っているような知らないような人たちと、技術的なようなそうでないような話し合いをずっとコンピュータの前でしながら、一日中サク山をチョコ次郎をしていました。</p> <p>子供の頃は知らないおじさんと話してはいけないよと言われて育ちますが、大人になれば大人です。<br /> 知らん人とも話しましょう。 きっと向こうも知らないです。<br /> 互いの技の赴くままに がんばって!</p> <p>PHPerKaigi 2021について よう知らんけど記す</p> <p><a target="_blank" rel="nofollow noopener" href="https://phperkaigi.jp/2021/">PHPerKaigi 2021</a></p> <p><img src="https://scontent.ftak1-1.fna.fbcdn.net/v/t1.0-9/165490724_10216175968147035_64225990969192653_o.jpg?_nc_cat=109&ccb=1-3&_nc_sid=730e14&_nc_ohc=KAs6XkjZKDQAX8kSlQt&_nc_ht=scontent.ftak1-1.fna&oh=624b573f858c5ee35f83c8be5abf7d20&oe=608672B4" alt="SakuYama" /></p> fkuMnk tag:crieit.net,2005:PublicArticle/16695 2021-02-20T20:03:15+09:00 2021-02-20T20:10:54+09:00 https://crieit.net/posts/Vue-CLI-Stylus Vue CLIの環境変数でStylusのグローバル変数を入れ替えるし <h1 id="Vue CLIの環境変数でStylusのグローバル変数を入れ替えるし"><a href="#Vue+CLI%E3%81%AE%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%A7Stylus%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%82%92%E5%85%A5%E3%82%8C%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%97">Vue CLIの環境変数でStylusのグローバル変数を入れ替えるし</a></h1> <p>米:この記事の有効期限:このコードは今は動くが、いずれ動かなくなる。2021年2月20日記す</p> <h2 id="まず背景として"><a href="#%E3%81%BE%E3%81%9A%E8%83%8C%E6%99%AF%E3%81%A8%E3%81%97%E3%81%A6">まず背景として</a></h2> <p>うう... おれ、JavaScript、わからん。</p> <p>ぜんぜん、わからん。</p> <h3 id="何がしたいのか?"><a href="#%E4%BD%95%E3%81%8C%E3%81%97%E3%81%9F%E3%81%84%E3%81%AE%E3%81%8B%EF%BC%9F">何がしたいのか?</a></h3> <p>Stylusのグローバル変数にVue CLIの環境変数が使えたら便利やろなあ...</p> <h2 id="結論"><a href="#%E7%B5%90%E8%AB%96">結論</a></h2> <p>うう... おれ、なにも書けない、なにも出来ない。</p> <p>出来た事だけ書く。</p> <ul> <li>Stylusのグローバル変数が書かれたファイルを2つ用意した。ビルド用と、開発環境用にだ!</li> <li>Vue CLIの環境変数が書かれたファイルを2つ用意した。ビルド用と、開発環境用にだ!</li> <li>Vue CLIの環境変数にStylusのグローバル変数が書かれたファイルのパスを記述した</li> <li>vue.config.jsでStylusのグローバル変数が書かれたファイルをインポートした</li> <li>yarn serveしたら開発環境用が、yarn buildしたらビルド用が! やったぜ!!</li> </ul> <h2 id="コード"><a href="#%E3%82%B3%E3%83%BC%E3%83%89">コード</a></h2> <h3 id="Stylusのグローバル変数が書かれたファイル"><a href="#Stylus%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%8C%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">Stylusのグローバル変数が書かれたファイル</a></h3> <p>これらはプロジェクトフォルダ内の任意の場所に置く</p> <p><strong>src/assets/stylus-global.styl</strong></p> <pre><code><br />// .env.productionで呼び出されるファイル HaikeiShoku = #cccccc </code></pre> <p><strong>src/assets/stylus-global-development.styl</strong></p> <pre><code><br />// .env.developmentで呼び出されるファイル HaikeiShoku = #999999 </code></pre> <h3 id="Vue CLIの環境変数が書かれたファイル"><a href="#Vue+CLI%E3%81%AE%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%8C%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB">Vue CLIの環境変数が書かれたファイル</a></h3> <p>これらはプロジェクトフォルダのルートに置く</p> <p><strong>.env.production</strong></p> <pre><code><br />// yarn build したときに呼び出されるファイル VUE_APP_STYLUS_GLOBAL='src/assets/stylus-global.styl' </code></pre> <p><strong>.env.development</strong></p> <pre><code><br />// yarn serve したときに呼び出されるファイル VUE_APP_STYLUS_GLOBAL='src/assets/stylus-global-development.styl' </code></pre> <h3 id="vue.config.jsでStylusのグローバル変数が書かれたファイルをインポートする"><a href="#vue.config.js%E3%81%A7Stylus%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%8C%E6%9B%B8%E3%81%8B%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B">vue.config.jsでStylusのグローバル変数が書かれたファイルをインポートする</a></h3> <p>これはプロジェクトフォルダのルートに置く</p> <p><strong>vue.config.js</strong></p> <pre><code>const path = require("path"); module.exports = { css: { loaderOptions: { stylus: { stylusOptions: { import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)], }, }, }, }, }; </code></pre> <h3 id="App.vueとかどこかにグローバル変数を書いて試す"><a href="#App.vue%E3%81%A8%E3%81%8B%E3%81%A9%E3%81%93%E3%81%8B%E3%81%AB%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E8%A9%A6%E3%81%99">App.vueとかどこかにグローバル変数を書いて試す</a></h3> <p>yarnでserveしたりbuildしたりして余韻に浸る。</p> <pre><code><br /><style lang="stylus"> #app font-family Avenir, Helvetica, Arial, sans-serif -webkit-font-smoothing antialiased -moz-osx-font-smoothing grayscale text-align center color #2c3e50 margin-top 60px background-color HaikeiShoku </style> </code></pre> <h3 id="vue.config.jsの補足"><a href="#vue.config.js%E3%81%AE%E8%A3%9C%E8%B6%B3">vue.config.jsの補足</a></h3> <h4 id="Yes! Good Look"><a href="#Yes%21+Good+Look">Yes! Good Look</a></h4> <p>このコードは動く。人類に未来が訪れる。</p> <pre><code>const path = require("path"); module.exports = { css: { loaderOptions: { stylus: { stylusOptions: { import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)], }, }, }, }, }; </code></pre> <h4 id="Oh! Not Work"><a href="#Oh%21+Not+Work">Oh! Not Work</a></h4> <p>これらのコードは動かない。人類は滅亡する。</p> <p><strong>FAIL</strong></p> <pre><code>const path = require("path"); module.exports = { css: { loaderOptions: { stylus: { import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)], }, }, }, }; </code></pre> <p><strong>FAIL</strong></p> <pre><code>const path = require("path"); module.exports = { css: { loaderOptions: { stylusOptions: { import: [path.join(__dirname, process.env.VUE_APP_STYLUS_GLOBAL)], }, }, }, }; </code></pre> <p><strong>VERDAMMT!!</strong></p> <pre><code>module.exports = { css: { loaderOptions: { stylus: { stylusOptions: { import: [process.env.VUE_APP_STYLUS_GLOBAL], }, }, }, }, }; </code></pre> <h2 id="参考文献"><a href="#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE">参考文献</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://cli.vuejs.org/guide/mode-and-env.html#modes">Modes and Environment Variables | Vue CLI</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://cli.vuejs.org/config/">Configuration Reference | Vue CLI</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://github.com/webpack-contrib/stylus-loader">GitHub - webpack-contrib/stylus-loader: A stylus loader for webpack.</a></li> </ul> <h2 id="検証環境"><a href="#%E6%A4%9C%E8%A8%BC%E7%92%B0%E5%A2%83">検証環境</a></h2> <p><strong>package.json</strong></p> <pre><code>{ "name": "try-globalval", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, "dependencies": { "core-js": "^3.8.1", "vue": "^3.0.4" }, "devDependencies": { "@babel/core": "^7.12.10", "@babel/eslint-parser": "^7.12.1", "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-service": "~5.0.0", "@vue/compiler-sfc": "^3.0.4", "@vue/eslint-config-prettier": "^6.0.0", "eslint": "^7.15.0", "eslint-plugin-prettier": "^3.2.0", "eslint-plugin-vue": "^7.2.0", "prettier": "^2.2.1", "stylus": "^0.54.8", "stylus-loader": "^4.3.1" } } </code></pre> fkuMnk tag:crieit.net,2005:PublicArticle/16639 2021-01-20T01:49:25+09:00 2021-01-20T01:49:25+09:00 https://crieit.net/posts/key-mapper-CapsLock-Linux key-mapperを使用したCapsLock大好きモードのご案内 (但しLinuxに限る) <h1 id="key-mapperを使用したCapsLock大好きモードのご案内 (但しLinuxに限る)"><a href="#key-mapper%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FCapsLock%E5%A4%A7%E5%A5%BD%E3%81%8D%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E3%81%94%E6%A1%88%E5%86%85+%28%E4%BD%86%E3%81%97Linux%E3%81%AB%E9%99%90%E3%82%8B%29">key-mapperを使用したCapsLock大好きモードのご案内 (但しLinuxに限る)</a></h1> <p>key-mapperを使うとkeyをmapperできます。<br /> しましょう。</p> <p>これは僕がkey-mapperを使って、Caps Lockキーを大好きになる物語です。<br /> (但しLinuxに限る)</p> <h2 id="keyをmapperするのだ"><a href="#key%E3%82%92mapper%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A0">keyをmapperするのだ</a></h2> <p>key-mapperはGitHubにあるやつです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/sezanzeb/key-mapper">GitHub - sezanzeb/key-mapper: An easy to use tool to change the mapping of your input device buttons.</a></p> <p>各自でがんばってインストールしましょう。<br /> ManjaroとArchとUbuntuとDebianの民は頑張らなくてもいいです。たぶん。</p> <p>ぼくはopenSUSE Tumbleweedの民なのでがんばります。</p> <p>これです。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3f53DJ4qFuqgehk1H5vDW7AAS1pVdPwpnImm8qV28__nQUlEI1uHHLLo1yj_fYx6TkSkMpmBs-F_t8q7D4gGqudsiBiEDNcnk5pRCoapNqXm0nBOShF38Gjmn-zA00t5Odx8NecBEz46N7d8FNDs31Tbw=w595-h232-no?authuser=0" alt="経験者は語る" /></p> <h2 id="頑張ればきっといつかは動くよ"><a href="#%E9%A0%91%E5%BC%B5%E3%82%8C%E3%81%B0%E3%81%8D%E3%81%A3%E3%81%A8%E3%81%84%E3%81%A4%E3%81%8B%E3%81%AF%E5%8B%95%E3%81%8F%E3%82%88">頑張ればきっといつかは動くよ</a></h2> <p>諦めずに色々やってみるとたぶん動きます。動かなくても大丈夫です、諦めましょう。きっといつかもっと便利な世の中になるとおもいますよ。</p> <p>なんかConfigファイルが空だとエラーになるのでJSON形式にしたり、ユーザーをinputグループに追加したり、再起動したりして動いたら動きます。RTFMしましょう。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/sezanzeb/key-mapper/blob/main/readme/usage.md">key-mapper/usage.md at main · sezanzeb/key-mapper · GitHub</a></p> <h2 id="Caps Lock だぁい好き"><a href="#Caps+Lock+%E3%81%A0%E3%81%81%E3%81%84%E5%A5%BD%E3%81%8D">Caps Lock だぁい好き</a></h2> <p>Caps Lock キーはこれです。ぼくのCaps Lock キーはここにあります。ぼくはここに居るよォ。</p> <p><img src="https://lh3.googleusercontent.com/pw/ACtC-3fz8hhtFyTDcTyHmsqs2v5OvrzWcG3dXI7CeeOfsEhM2p4tKcPU6t0eM3MwMj1k7soQTaly_DoabisBUilf7zlMotQuZFvaVqwnJybIWZE4fR2AqgCMI9Xy8qQvShCRJOHp_ZfyApsQEXw-fbYph1GTcA=w1240-h931-no?authuser=0" alt="認識することで初めて見える物" /></p> <p>皆さんのCaps Lock キーはどこにありますか? 見つけたらぜひツイートしてくださいね。これは認識しなければ見つけることが出来ないとても珍しい物です。</p> <h2 id="さらばCaps Lock、そして永遠に…"><a href="#%E3%81%95%E3%82%89%E3%81%B0Caps+Lock%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6%E6%B0%B8%E9%81%A0%E3%81%AB%E2%80%A6">さらばCaps Lock、そして永遠に…</a></h2> <p>ということで、奴の存在を消しましょう。<br /> こうです。</p> <p><img src="https://pbs.twimg.com/media/EsGlI0BVgAAD3tE?format=png&name=900x900" alt="Caps Lock 大好きモード" /></p> <p>henkan_modeをMappingしたので、日本語入力の切り替えキーになりました。わーい、ワイ、英語配列キーボード、やったぜ!!</p> <p>あとは、ijklキーをそれぞれ↑←↓→キーとして移動する流派があると聞いたのでそうしました。CtrlともAltともバッティングしないので、システム全体でキモい操作がたぶん出来ます。やったぜ!!</p> <h2 id="動作環境"><a href="#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">動作環境</a></h2> <ul> <li>OS: openSUSE Tumbleweed</li> <li>Desktop environment: KDE Plasma 5</li> <li>Keyboard: ARCHISS AS-KBPD66/LRBK</li> </ul> fkuMnk tag:crieit.net,2005:PublicArticle/16609 2021-01-17T01:18:25+09:00 2021-01-17T01:18:25+09:00 https://crieit.net/posts/kindlemitlinux オレLinux、Kindle読む。 <h1 id="オレLinux、Kindle読む。"><a href="#%E3%82%AA%E3%83%ACLinux%E3%80%81Kindle%E8%AA%AD%E3%82%80%E3%80%82">オレLinux、Kindle読む。</a></h1> <h2 id="なんなのか?"><a href="#%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F">なんなのか?</a></h2> <p>オレ、Linux使う。Linux、Kindle無い。</p> <p>ゎぃゎょゎぃ……</p> <h2 id="なぜなのか?"><a href="#%E3%81%AA%E3%81%9C%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F">なぜなのか?</a></h2> <p>オレ、ぱそこん使う。ぱそこん、画面デカイ。</p> <p>ぅゎぁっょぃゎ……</p> <h2 id="どうしたのか?"><a href="#%E3%81%A9%E3%81%86%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B%EF%BC%9F">どうしたのか?</a></h2> <p>オレ、Genymotion使う。Genymotion、Androidの8.0作れる。</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.genymotion.com/">Genymotion Android Emulator | Cloud-based Android virtual devices | Develop - Automate your tests - Validate with confidence</a></p> <p>オレ、OpenGApps使う。OpenGApps、x86のnanoで動く。</p> <p><a target="_blank" rel="nofollow noopener" href="https://opengapps.org/">The Open GApps Project</a></p> <p><a target="_blank" rel="nofollow noopener" href="https://docs.genymotion.com/saas/latest/04_Basic_Steps.html#installing-open-gapps">Installing Open GAppss | Genymotion documentation</a></p> <p>オレ、ARM-Translation使う。ARM-Translation、Kindle動く。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/m9rco/Genymotion_ARM_Translation">GitHub - m9rco/Genymotion_ARM_Translation: 👾👾 Genymotion_ARM_Translation Please enjoy!</a></p> <p>ゎぃゎっょぃょぉ……?</p> <h2 id="どうなったのか?"><a href="#%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B%EF%BC%9F">どうなったのか?</a></h2> <p>ぱそこん、画面デカイ。老後、シアワセ。</p> <p>ぃゃぁょぃゎぁ……</p> <p>Linux上で動作しているKindleの様子</p> <p><img src="https://pbs.twimg.com/media/EryRr5QVkAEdx-C?format=jpg&name=large" alt="Linux上で動作しているKindle" /></p> <p>図鑑を拡大して文字を大きく表示した様子<br /> <img src="https://pbs.twimg.com/media/EryRs6JVgAAAzfl?format=jpg&name=large" alt="図鑑を拡大して文字を大きく表示した様子" /></p> <h2 id="動作環境"><a href="#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">動作環境</a></h2> <ul> <li>openSUSE Tumbleweed</li> <li>VirtualBox 6.1</li> <li>Genymotion Desktop 3.1.2</li> <li>OpenGApps x86 8.0 nano</li> </ul> fkuMnk tag:crieit.net,2005:PublicArticle/16369 2020-12-16T01:44:54+09:00 2020-12-16T01:44:54+09:00 https://crieit.net/posts/9c344c1c898ec76f7a853cccc07d4c33 業務、棚に上げるくん(物理) <h1 id="業務、棚に上げるくん(物理)"><a href="#%E6%A5%AD%E5%8B%99%E3%80%81%E6%A3%9A%E3%81%AB%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%8F%E3%82%93%EF%BC%88%E7%89%A9%E7%90%86%EF%BC%89">業務、棚に上げるくん(物理)</a></h1> <p>こんにちは。<br /> この記事は<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/5038">GYOMUハック/業務ハック Advent Calendar 2020 - Adventar</a> 16日目の投稿です。</p> <p>普段は一人でパソコンに向かって愉快に働いている実在する人物です。業務ハッカーとかハッカーでは無いんですけど、ハッカーっていう響きがカッコいいので参加しました。ブラインドタッチとかは得意です。先日なども触れては行けないキーをブラインドタッチ(ルビ:神の見えざる手)してフォルダは消え業務は遅延しました。助けて、業務ハッカー!!</p> <h2 id="本日の概要"><a href="#%E6%9C%AC%E6%97%A5%E3%81%AE%E6%A6%82%E8%A6%81">本日の概要</a></h2> <p>今日お伝えする主な内容を以下にまとめました。</p> <h3 id="業務"><a href="#%E6%A5%AD%E5%8B%99">業務</a></h3> <p>ぱそこんで働いています。業務はここで執り行われ、世間に帰結します。</p> <p><img src="https://64.media.tumblr.com/baf06694bd7da76d13af0c914bcea829/c1deba751094b966-80/s540x810/b454a4707d3f04f2410ee3d7a078e39bcbd7339b.jpg" alt="机上のPC" /></p> <h3 id="棚"><a href="#%E6%A3%9A">棚</a></h3> <p>本来であれば台所で使われるはずだった棚です。</p> <p><img src="https://64.media.tumblr.com/fe39e6f47adee100fd14c0437b8d9cc2/c1deba751094b966-74/s540x810/a67161b3c6b440fac7b2e9b2c1e4169af34ec4e9.jpg" alt="ワイヤーラック" /></p> <h3 id="上げる"><a href="#%E4%B8%8A%E3%81%92%E3%82%8B">上げる</a></h3> <p>上げます。 ☆SUCCESS!!</p> <p><img src="https://64.media.tumblr.com/f6f06ac558f7151acab1e106abccf8e4/c1deba751094b966-33/s540x810/8cd239b3504476164bac1cc982af8faa9ef9a14a.jpg" alt="インストール" /></p> <h1 id="業務、棚に、上げるくん \ 物理 /"><a href="#%E6%A5%AD%E5%8B%99%E3%80%81%E6%A3%9A%E3%81%AB%E3%80%81%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%8F%E3%82%93+%EF%BC%BC+%E7%89%A9%E7%90%86+%EF%BC%8F">業務、棚に、上げるくん \ 物理 /</a></h1> <p>なぜなのか?</p> <h2 id="業務のこと"><a href="#%E6%A5%AD%E5%8B%99%E3%81%AE%E3%81%93%E3%81%A8">業務のこと</a></h2> <p>昨年までの業務スタイルは、ノートぱそこんを1個背負ってWi-Fiと電源を求めてさまよい歩く流しの行商スタイルで行っており、事務所があるのに事務所に居ない、何をやっているのかわからない場所がある、ゲストハウスはここですか? 等と好評を得ておりました。</p> <p>様々な場所でおもむろにPCを取り出して鉄の心で働いていくストロングスタイルだったので、いつの頃からか使用する機器も必然的に無線方式のものを多用するようになっていきます。</p> <p>そして、時は西暦2020年…、世界は在宅の渦に包まれたッ!!</p> <p>えっ、もう外に出て働かなくてもいいのか? やったぜ!!</p> <p>こうして、職は途絶え、衣食は尽き、PCは有線の渦に呑み込まれていった……</p> <p><img src="https://64.media.tumblr.com/9aa7766692f6382246b0444f3987d864/c1deba751094b966-7c/s540x810/6a9a83aac88965bd1616355d978d137b3a325f35.jpg" alt="有線の渦に呑み込まれたPC" /></p> <h2 id="棚のこと"><a href="#%E6%A3%9A%E3%81%AE%E3%81%93%E3%81%A8">棚のこと</a></h2> <p>これは台所で使う棚です。ホームセンターなどで取り扱っている市販の物です。食器やら炊事道具やらを、上げたり下げたりできてとても便利な道具ですね。</p> <p>そう、ここにさえ、来ることがなければ……</p> <p><img src="https://64.media.tumblr.com/7e6ea08c37254f74a03d72cfda58acb7/c1deba751094b966-43/s540x810/4097b8ec46e53e7ff889ab275fa39f69c44bf513.jpg" alt="台所で使用する際のイメージ" /></p> <h2 id="上げるくん"><a href="#%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%8F%E3%82%93">上げるくん</a></h2> <p>はい、上げました。このようにッ!!</p> <p><img src="https://64.media.tumblr.com/fd8f4b1b3329ac7ce1aaf63a7d9b12c7/c1deba751094b966-4d/s540x810/e1dcaed4c77a562357b6fa1d1a0cdfee8096c217.jpg" alt="棚に上げられた業務マシン" /></p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>業務は一度棚に上げてみることで、心にも物理的にも余裕が生まれます。</p> <p>この冬、みなさんも業務を棚に上げてみませんか?</p> <h3 id="棚に上げるとこんなにお得!"><a href="#%E6%A3%9A%E3%81%AB%E4%B8%8A%E3%81%92%E3%82%8B%E3%81%A8%E3%81%93%E3%82%93%E3%81%AA%E3%81%AB%E3%81%8A%E5%BE%97%EF%BC%81">棚に上げるとこんなにお得!</a></h3> <p><strong>フックつきのカゴ</strong><br /> 実行中のtanaにkagoをhookすることができます。<br /> <img src="https://64.media.tumblr.com/ffbad49f6c733b6f78f95574d5b26821/c1deba751094b966-19/s540x810/545cba29cb6b86467f3cfe0a425733b74f3bb5d9.jpg" alt="フックつきのカゴ" /></p> <p><strong>掃除道具</strong><br /> ゴミを掃除するはずの道具がゴミになる。そんなことってありませんか? でもカゴにしまえば大丈夫! ちなみに、こうやってご機嫌でキーボードの掃除をしている間にも、押してはいけないキーを押し、消えてはいけない物が消えていく…<br /> これがこの世のさだめです。</p> <p><img src="https://64.media.tumblr.com/733f1051bfbd285bda3fd2d4556eeaa2/c1deba751094b966-b1/s540x810/ce8eeda82a1830e9189a0e0e782f34275e32152c.jpg" alt="掃除道具" /></p> <p><strong>隙間に差し込まれたキーボード</strong><br /> ご覧ください、ぱそこんを↑に上げる事によって本体のより近くで打鍵することができるようになるんですよ、本体にもキーボードがあるにも関わらずッ。</p> <p><img src="https://64.media.tumblr.com/6bf16bc52f65cdea5bfb69a46c23b1b8/c1deba751094b966-f7/s540x810/d2c58223a60bab6fad66d6e2662a6b0143dace9d.jpg" alt="隙間に差し込まれたキーボード" /></p> <p><strong>リストレスト</strong><br /> このように、最近のホームセンターなどのキッチンコーナーにはリストレストも並べられていますので、パソコン屋さんを求めて幾つもの街を渡り歩かなくても大丈夫な世の中になりました。</p> <p><img src="https://64.media.tumblr.com/1ba466491b5ad1615d3913a8ed316b2c/c1deba751094b966-58/s540x810/0db30fad0980aa4449a7f2ccdc912a2eb8a565cd.jpg" alt="リストレスト" /></p> <p>※文中でリストレストとして紹介されているものは食器洗浄用のスポンジです。リストレストとして使用されたものを誤って食器洗浄に使用されないようご注意ください。</p> <h2 id="おまけコーナー"><a href="#%E3%81%8A%E3%81%BE%E3%81%91%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC">おまけコーナー</a></h2> <h3 id="ウルテク コーナー"><a href="#%E3%82%A6%E3%83%AB%E3%83%86%E3%82%AF+%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC">ウルテク コーナー</a></h3> <p>これは、ご家庭にある長い棒状の物体に、洗面所などにある洗濯ばさみのような物でWebカメラを挟んでいる様子です。<br /> あちらから、こちらは見えません。上げたり下げたり自由自在。ぜひお試し下さい。</p> <p><img src="https://64.media.tumblr.com/8c3b4afb1b0d3b3416586421b387b563/c1deba751094b966-00/s540x810/e21af8ce60f6258670b7d768ead1c02df1a37ada.jpg" alt="木に挟まれたWebカム" /></p> <h3 id="告知 コーナー"><a href="#%E5%91%8A%E7%9F%A5+%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC">告知 コーナー</a></h3> <p>このように棚に上げられたマシンがバックヤードで大奔走するといわれているフルオンラインカンファレンス、</p> <p><a target="_blank" rel="nofollow noopener" href="https://dojocon2020.coderdojo.jp/">DojoCon Japan 2020 - Beyond the distance(距離を超えて) -</a></p> <p><img src="https://64.media.tumblr.com/b5b5119da6a0652134aaeea340aa364f/e962fe3b57d0d1ac-b5/s540x810/6dbba546f9601b28f82cb1cac7f034446ccb93f1.png" alt="参加者募集中" /></p> <p>3つのオンライン会場での皆様のご活躍に期待しています。<br /> 真のHackerはここから現れるのかッ!? おたのしみに。</p> <h3 id="おわりに コーナー"><a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB+%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC">おわりに コーナー</a></h3> <p>いかがでしたし。</p> <p>この記事は<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/5038">GYOMUハック/業務ハック Advent Calendar 2020 - Adventar</a>の16日目の投稿でした。</p> <p>ひきつづき、GYOMUハック/業務ハック Advent Calendarをお楽しみ下さい。</p> fkuMnk tag:crieit.net,2005:PublicArticle/16345 2020-12-12T10:06:10+09:00 2020-12-12T10:06:10+09:00 https://crieit.net/posts/GCP-GCE-VNC-OBS-openSUSE ☆GCPのGCEでVNCのOBSしたやつは、やつの名は、openSUSE…!! <h1 id="☆GCPのGCEでVNCのOBSしたやつは、やつの名は、openSUSE…!!"><a href="#%E2%98%86GCP%E3%81%AEGCE%E3%81%A7VNC%E3%81%AEOBS%E3%81%97%E3%81%9F%E3%82%84%E3%81%A4%E3%81%AF%E3%80%81%E3%82%84%E3%81%A4%E3%81%AE%E5%90%8D%E3%81%AF%E3%80%81openSUSE%E2%80%A6%21%21">☆GCPのGCEでVNCのOBSしたやつは、やつの名は、openSUSE…!!</a></h1> <h2 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h2> <p>この記事は<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/5500">openSUSE Advent Calendar 2020 - Adventar</a>の12日目の投稿です。</p> <p>このたび<a target="_blank" rel="nofollow noopener" href="https://hansendo.com/blog/mrexcluded/opensuseadventcalendar20181201_4196">2年ぶり</a>に参加をキメてみました。普段はDesktopでTumbleweedを使ってソフトウェアを書いたり書かなかったりしていますが、今回は<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com">GCP:Google Cloud Platrofm</a>に関するお話をしたいとおもいます。</p> <p>このお話は、先月11月28日にオンライン開催されたOSC福岡の<a target="_blank" rel="nofollow noopener" href="https://youtu.be/VrtsaycC_I0?t=465">ライトニングトークセション</a>で発表された資料から、クラウドコンピューティングに関する部分を詳解したものです。</p> <p><img src="https://64.media.tumblr.com/749506a2a4b49a60f0a20547ac73218c/e962fe3b57d0d1ac-6a/s640x960/6777b6949a08895c970adefd41b25b1bc756059b.png" alt="image" /></p> <h2 id="なんなのか?"><a href="#%E3%81%AA%E3%82%93%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F">なんなのか?</a></h2> <p>かいつまんで概要を解説しますと、昨今流行りのブロードキャスト映像配信システムをクラウドコンピューティングで実現してみたやつです。図で表すとこのような感じですね。</p> <p><img src="https://64.media.tumblr.com/768d690b79e79bdb202896d2f1b57981/e962fe3b57d0d1ac-27/s1280x1920/1c242cb16f2b382a75e5b8d7284164dec9b7376d.png" alt="図" /></p> <p>GCPが提供するクラウドコンピューティング、それはGCE:Google Compute Engineでワタシは4歳でした。<br /> その味は甘くてクリーミィで、こんな素晴らしいCompute Engineを使えるワタシはきっと特別な存在なのだと感じました。</p> <p>今ではワタシがオジイサン、インスタンスにあげるのはもちろんopenSUSE。<br /> なぜなら、彼もまた特別な存在だからです。</p> <h2 id="なぜなのか?"><a href="#%E3%81%AA%E3%81%9C%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F">なぜなのか?</a></h2> <p>補足しますと、Google Compute Engineというのは、クラウド上に仮想のコンピュータを作成して、インターネット経由で操作することが出来る仕組みを提供してくれるサービスです。たぶん。<br /> で、作成された仮想のコンピュータのことをVMインスタンスみたいに呼びます。</p> <p><img src="https://64.media.tumblr.com/9c17f06b5ad61e5e096b8b18529448da/e962fe3b57d0d1ac-a4/s1280x1920/c9060ec4c6177d41141f00c9aa58b1cb661cad90.png" alt="インスタンスの作成画面" /></p> <p>※画像はイメージです。</p> <p>インスタンスは仮想のコンピュータですので、OSが必要になりますよね。インスタンスにあげるのはもちろんopenSUSE。<br /> なぜなら、彼もまた特別な存在だからです。</p> <h2 id="あるんかいないんかい"><a href="#%E3%81%82%E3%82%8B%E3%82%93%E3%81%8B%E3%81%84%E3%81%AA%E3%81%84%E3%82%93%E3%81%8B%E3%81%84">あるんかいないんかい</a></h2> <p>ということで、AMD Epyc CPUの搭載されたファンタスティックなインスタンスを作成しました。OSはもちろんopenSUSE、ブートディスクから接続されているイメージを変更してopenSUSEを選択しましょう。</p> <p><img src="https://64.media.tumblr.com/6118f2446abe127324ab86be71832816/e962fe3b57d0d1ac-1f/s1280x1920/7c602ff874c50d41c9765593d754704c15b34659.png" alt="ブートディスク選択画面" /></p> <p>そんな、ばかな……</p> <h3 id="ないんかい"><a href="#%E3%81%AA%E3%81%84%E3%82%93%E3%81%8B%E3%81%84">ないんかい</a></h3> <p>最近ちょっと目が悪くなってきたのかもしれないのですが、見つからないです…。<br /> 昔はあったような気がするんですけど、選択できるOSが見つかりません。これではインスタンスを作成することが出来ないッ! 一体どうすれば……</p> <p>※注:この記事はopenSUSEアドベントカレンダーなので、openSUSEが見つからなければこの章で打ち切り未完丸投げ終了なんですが、皆様はぜひ親しみやすいOSを選択してご活用いただければ幸いです。</p> <h3 id="あるんかい"><a href="#%E3%81%82%E3%82%8B%E3%82%93%E3%81%8B%E3%81%84">あるんかい</a></h3> <p>黒い画面「 ^ ^ ありまっせ」</p> <p><a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/compute/docs/images#community_supported_images">コミュニティでサポートされるイメージ | Compute Engine ドキュメント | Google Cloud</a></p> <p>ありました。</p> <p>そう、よりオープンソースソフトウェア色の強いコミュニティサポートイメージとしてなぁッ!!</p> <p><img src="https://64.media.tumblr.com/6a897fec8fa94d5e659eaec9da92d158/e962fe3b57d0d1ac-c9/s640x960/37ac69bd6b58e8ba0e89272e2628ac1789be4e0d.png" alt="使用可能なコミュニティサポートイメージ" /></p> <h3 id="これをこうしてこうじゃ!"><a href="#%E3%81%93%E3%82%8C%E3%82%92%E3%81%93%E3%81%86%E3%81%97%E3%81%A6%E3%81%93%E3%81%86%E3%81%98%E3%82%83%EF%BC%81">これをこうしてこうじゃ!</a></h3> <p>GCPは、ブラウザのコンソールからクラウドシェルっていう機能で黒い画面にgcloudというコマンドを入力することでも操作が出来ます。</p> <p>なので、これをこうして、こうじゃぁあああ!!</p> <pre><code>gcloud compute disks create 作成するディスクの名前 --image-project=opensuse-cloud --image=opensuse-leap-15-2-v20200702 --type=pd-ssd --zone=ディスクを作成するゾーン --size=40GB </code></pre> <p><img src="https://64.media.tumblr.com/2f60f29cc780f5ce6eb00d4c97fd21b8/e962fe3b57d0d1ac-88/s640x960/3e00a34784efb3589341c3064599e491849eb3cb.png" alt="実行に成功した様子" /></p> <p>うまくいきおったら、冒頭のブートディスクに接続されているイメージを変更して、既存のディスクから作成したopenSUSEを選択できるようになっていますわい。</p> <p><img src="https://64.media.tumblr.com/1c5f74921255357955377f064677794f/e962fe3b57d0d1ac-f1/s540x810/47c077056a2d3d616ffc56057415bfa284e599af.png" alt="作成したディスクを選択している様子" /></p> <h2 id="やったぜ!!"><a href="#%E3%82%84%E3%81%A3%E3%81%9F%E3%81%9C%EF%BC%81%EF%BC%81">やったぜ!!</a></h2> <p>では早速起動してみましょう。</p> <p><img src="https://64.media.tumblr.com/dd4ae1cec40f4e57a1da99a239ffdde3/e962fe3b57d0d1ac-81/s500x750/090550fa6f5b550f85da95cc39f7d46c7c04a606.png" alt="起動直後の画面" /></p> <p>やったぜ!! これでyastし放題の心置きなくzypperできる、とびっきりのわがままインスタンスの完成ですね。</p> <p><img src="https://64.media.tumblr.com/0190ef64b389e7b33533022ca82782b0/e962fe3b57d0d1ac-f2/s1280x1920/b6a57bc76f24547ecfb4ef3fbd42a7f940759027.png" alt="YaST2の起動画面" /></p> <p>ゴエー! ブラウザで開くとフォントゴエー!!</p> <h3 id="ここから先は君たちの目で確かめてくれッ"><a href="#%E3%81%93%E3%81%93%E3%81%8B%E3%82%89%E5%85%88%E3%81%AF%E5%90%9B%E3%81%9F%E3%81%A1%E3%81%AE%E7%9B%AE%E3%81%A7%E7%A2%BA%E3%81%8B%E3%82%81%E3%81%A6%E3%81%8F%E3%82%8C%E3%83%83">ここから先は君たちの目で確かめてくれッ</a></h3> <p>ということで、ここから先はopenSUSEの話になりますので、GCPのGCEにあるopenSUSEを使って、自由自在にopenSUSEしてください。ありがとうございました。</p> <p>― 完 ―</p> <h2 id="おまけコーナー"><a href="#%E3%81%8A%E3%81%BE%E3%81%91%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC">おまけコーナー</a></h2> <p>上記のopenSUSEを、とびっきりのわがままopenSUSEして動画配信をしたときの様子は下記のとおりです。</p> <p><img src="https://64.media.tumblr.com/bf69453a9f01534787b8447db2799d45/e962fe3b57d0d1ac-8e/s1280x1920/e55c2e414b7445e748e9b4d43d92a42f65bf53d0.png" alt="動画配信時のイメージ" /></p> <p>こんな感じで、実際のオンラインカンファレンスの様子をリアルタイムで配信するシステムとして使われました。</p> <p><img src="https://64.media.tumblr.com/48eaf8e74149e7a64725ddea7d046f89/e962fe3b57d0d1ac-d7/s1280x1920/6a745d52f70fb176c96bdb68512f9721ffe70d95.png" alt="動画サムネイル" /><br /> <a target="_blank" rel="nofollow noopener" href="https://youtu.be/r_DiQTWEOwc">https://youtu.be/r_DiQTWEOwc</a></p> <h3 id="予告編 壱"><a href="#%E4%BA%88%E5%91%8A%E7%B7%A8+%E5%A3%B1">予告編 壱</a></h3> <p>上記内容の動画配信システムを作って配信する内容の電子奇書を技術書典10で頒布予定です。果たして原稿はあがるのか!? 乞うご期待。</p> <p><a target="_blank" rel="nofollow noopener" href="https://techbookfest.org/event/tbf10">技術書典10</a></p> <h3 id="予告編 弐"><a href="#%E4%BA%88%E5%91%8A%E7%B7%A8+%E5%BC%90">予告編 弐</a></h3> <p>上記GCPのGCEに作られたAMD Epyc インスタンスで動作するファンタスティックopenSUSEが、バックヤードで大活躍するとまことしやかに囁かれているフルオンラインカンファレンス、DojoCon Japan 2020。</p> <p>スタッフ一同 鋭意開催準備中です。</p> <p>2020年12月27日に、ご期待下さい。</p> <p><img src="https://64.media.tumblr.com/b5b5119da6a0652134aaeea340aa364f/e962fe3b57d0d1ac-b5/s640x960/b9be34f1835b022ae336e11c2a74ae85850d6b6d.png" alt="DojoConJapanImage" /></p> <p><a target="_blank" rel="nofollow noopener" href="https://dojocon2020.coderdojo.jp/">DojoCon Japan 2020 - Beyond the distance(距離を超えて) -</a></p> <h2 id="いかがでしたか?"><a href="#%E3%81%84%E3%81%8B%E3%81%8C%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8B%EF%BC%9F">いかがでしたか?</a></h2> <p>全然詳解されていないし、GCPの年収、最終学歴も公表されていないようです。 調べてみましたが、結論はわかりませんでした!</p> <p>気に入ったらぜひ、いいね、チャンネル登録、金塊送付をしてくださいね!</p> <p>この記事は<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/5500">openSUSE Advent Calendar 2020 - Adventar</a>の12日目の投稿でした。</p> <p>ひきつづき、openSUSE Advent Calenderをお楽しみ下さい。</p> fkuMnk tag:crieit.net,2005:PublicArticle/16344 2020-12-12T09:48:50+09:00 2020-12-12T12:09:42+09:00 https://crieit.net/posts/Ninja なんかNinjaが活躍を報告してくれて嬉しい話 <h1 id="なんかNinjaが活躍を報告してくれて嬉しい話"><a href="#%E3%81%AA%E3%82%93%E3%81%8BNinja%E3%81%8C%E6%B4%BB%E8%BA%8D%E3%82%92%E5%A0%B1%E5%91%8A%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%A6%E5%AC%89%E3%81%97%E3%81%84%E8%A9%B1">なんかNinjaが活躍を報告してくれて嬉しい話</a></h1> <h2 id="まず背景として"><a href="#%E3%81%BE%E3%81%9A%E8%83%8C%E6%99%AF%E3%81%A8%E3%81%97%E3%81%A6">まず背景として</a></h2> <p>こんにちは。<br /> この記事は<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/4952">CoderDojo Advent Calendar 2020 - Adventar</a> 6日目の投稿です。<br /> 2年ぶりの参加となりますが、今回もCoderDojo紫雲での活動内容についてお届けしたいとおもいます。</p> <p><em>※この文章はノリと勢いで一気にグワッっと書き綴ったので、後で恥ずかしくなって数カ月後くらいに加筆修正されるかもしれません。乞うご期待。</em></p> <blockquote> <p>CoderDojo<br /> The community of 2322 free, open and local programming clubs for young people<br /> <a target="_blank" rel="nofollow noopener" href="https://coderdojo.com/ja-JP">CoderDojo – 世界中の子どもたちがともに技術を創造し探求することを可能にします</a><br /> <img src="https://64.media.tumblr.com/674e988eaec94678ca3e33e2fc667268/b8cb95d11a147e96-3b/s540x810/96502fd83881a6f4a119eedcd242f9444c0521eb.png" alt="CoderDojo" /></p> </blockquote> <h2 id="時は西暦2019年末、愛知県名古屋市……"><a href="#%E6%99%82%E3%81%AF%E8%A5%BF%E6%9A%A62019%E5%B9%B4%E6%9C%AB%E3%80%81%E6%84%9B%E7%9F%A5%E7%9C%8C%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%B8%82%E2%80%A6%E2%80%A6">時は西暦2019年末、愛知県名古屋市……</a></h2> <p>ちょうど1年ほど前に愛知県を舞台に開催されたDojoCon Japan 2019に、ぼくもスタッフとかチャンピオン相談員とかで参加しておりまして、その時の懇親会のライトニングトークで、やがてCoderDojoを離れていくNinjaたちのことについてお話しました。<br /> <img src="https://64.media.tumblr.com/4e6389aabe2d4d0d9a9c890659363fc0/b8cb95d11a147e96-ff/s540x810/ca3d0d08d17c2a81585ec71a53acf9dc7a6d0c57.png" alt="LT_TITLE" /></p> <p>年末から年度末に掛けては、一部の学生にとっては受験シーズンにあたり、出会いと別れの季節であったりします。たぶん。<br /> NinjaたちのCoderDojoを離れていく理由についてはもちろん人それぞれの千差万別なんですが、成長につれて広がっていく社会的な世界に合わせて、自分たちの道を見つけながら逞しく進んでいってもらえれば、それはめっちゃ頼もしいやんけ! というふうにおもいます。</p> <h2 id="新しく入ってくるNinjaと、新しく始めたこと"><a href="#%E6%96%B0%E3%81%97%E3%81%8F%E5%85%A5%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8BNinja%E3%81%A8%E3%80%81%E6%96%B0%E3%81%97%E3%81%8F%E5%A7%8B%E3%82%81%E3%81%9F%E3%81%93%E3%81%A8">新しく入ってくるNinjaと、新しく始めたこと</a></h2> <p>ここからは、2020年に入ってCoderDojo紫雲で新しく始まったことと、変化について書いてみたいとおもいます。<br /> <img src="https://64.media.tumblr.com/9fd4489a98579d27c8bbc0113bc21b66/b8cb95d11a147e96-d1/s1280x1920/37032727bf737637cae4bf56206e7adbb57b08bf.jpg" alt="CoderDojo紫雲" /></p> <h3 id="Case1.デジタルグラフィックス"><a href="#Case1.%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9">Case1.デジタルグラフィックス</a></h3> <p>これまでも単発では絵を描いたりすることもあったんですが、継続的な取り組みが始まりました。ペンタブ持参でどんどん描き進めていくので、メンターとしては完成を見守るばかりですw</p> <p>グラフィックツールの作法とか概念的なものが、最初は分かりづらかったりするので、レイヤを組み合わせるというようなデジタルツール側のアドバイスを行っています。最近は別のGameJamで教わったBlenderで立体オブジェクトの作成にも挑戦したりしていて、成長が著しいです。田舎あるあるの、周りに同じような興味を持つ仲間が見つからないというのが惜しいところですが、年齢が上がるに連れて使用できるオンラインサービスも増えてくるので、いずれはそこで活躍の場を見いだせることができるんじゃないかなーと期待しています。</p> <p>主な使用ツール:<a target="_blank" rel="nofollow noopener" href="https://krita.org/jp/">Krita | デジタルでのお絵描きと創造の自由を</a><br /> <img src="https://64.media.tumblr.com/27fd654ff60e299731170036f7753ae1/b8cb95d11a147e96-8e/s540x810/141d3d7d94bea13d843738a3767753d5bf2713cb.png" alt="Krita" /></p> <h3 id="Case2.動画編集"><a href="#Case2.%E5%8B%95%E7%94%BB%E7%B7%A8%E9%9B%86">Case2.動画編集</a></h3> <p>まったく何も無い状態から、動画編集を始めてみたいっていう希望があったので、メンターとして取り組んでみました。持ち込みできるPCが無くて家庭でも共用ということだったので、ひとまずDojoのPCを使ってもらうことにして、動画編集の基礎中の基礎をKdenliveを使って体感してもらいました。上から下に映像と音声のトラックが重なってて、左から右に進む時間軸を切ったり貼ったりしながら操作して、一つの作品を生み出していくみたいなやつですね。<br /> 次回来るときには、編集してみたい動画を撮影して持ってきてねって約束して、持参してもらったんですけど、その時気がついたんですよね、お手持ちのその端末はiPodなのでは? ということに! (※nanoではない)</p> <p>その日からは、急遽予定を変更してiPodでできる方法を使っていつでも自由に動画編集ができる方法を探っていくことにしました。コンピュータは、人の持つ力を増幅させる装置でもあるので、使う人の身近にあって自由に使うことができる端末である方が自分自身のポテンシャルをより良く引き出すことができるんです。しらんけど。</p> <p>誰かに届けるために作りたいという動機もあってか、開催回数の減少にも関わらず、その日以降の技術の向上には目覚しいものがありました。なんかちょっと良い話になりそうなので、これはここで以上です。</p> <p><img src="https://64.media.tumblr.com/c4df76433c4393653ee931853adc913c/b8cb95d11a147e96-5d/s540x810/6b1c473842c2c23bdc5466c255ac33b2b5acb4cf.png" alt="身近にあって自由に使うことができる端末" /></p> <h3 id="Case3.Scratchの次の道"><a href="#Case3.Scratch%E3%81%AE%E6%AC%A1%E3%81%AE%E9%81%93">Case3.Scratchの次の道</a></h3> <p>Scratch、その次に。というやつです。これはある意味世界中のCoderDojoの業であり命題なのかも。ということで我々は何の考えもなく唐突に<a target="_blank" rel="nofollow noopener" href="https://docs.microsoft.com/ja-jp/dotnet/csharp/">C#</a>に突撃して三ヶ月の激闘の末、ボコボコに敗北しました。<br /> いや、これは、言い訳をすると、ぜんぜん駄目だったわけじゃなく、チュートリアルを完了して、だいたい基礎も理解できたとおもったけど、気がついたら<a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/%E5%A4%AA%E5%B9%B3%E6%B4%8B">太平洋の真ん中</a>を当て所もなく漂流してたっていう感じです。例えるならばッ!</p> <p>では気を取り直して、もう少し近い道を探しましょう。太平洋横断とかではなくて、Scratchちょっと次の道、2つの道が見えてきました。1つ目の道は、<a target="_blank" rel="nofollow noopener" href="https://gdevelop-app.com/ja/">GDevelop</a>。これはブロック型ではないんですが、いろんな選択肢を選んだり組み合わせたりしてプログラミングしていく、オーサリングツール的なゲームエンジンです。最初はこれのチュートリアルを進めながら少しずつScratchから旅立っていきました。このままGDevelopを極めてもいいんですが、2つ目の道にも挑戦してみました。なぜなら我々にはもう残された時間がありません。受験勉強が控えているのです。</p> <p>そんなこんなで、残された時間の2つ目の道は、<a target="_blank" rel="nofollow noopener" href="https://phaser.io">Phaser3</a>。これはHTML5を使った本格的なゲームエンジンです。ガリゴリとコードを書き続けることになるので、プログラミングぅって気持ちも高まることでしょう。しらんけど。<br /> いろいろあって、限られた期間ながら、デザインスプリント的手法も取り入れつつ、最終試練シリーズ、「始まりと終わりのある遊べるゲーム」を作ることに成功しました。この成功を糧に、進み始めたエンジニアリング人生を逞しく生き抜いてほしいです。</p> <p><img src="https://64.media.tumblr.com/652e5e7acca15d2cf5a95b6b20ae9e51/b8cb95d11a147e96-23/s540x810/c352927989b073dfe79da940582f390f1dddf4b7.png" alt="デザインスプリント的手法" /><br /> <img src="https://64.media.tumblr.com/7b672df4d98d252f20ac581aed162e41/b8cb95d11a147e96-5d/s540x810/4be942b44cbc19f97b8566c05f75d6da1f4d90bf.png" alt="遊べるゲーム" /></p> <h3 id="Case4.オンラインCoderDojo"><a href="#Case4.%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3CoderDojo">Case4.オンラインCoderDojo</a></h3> <p>これはもう、文章が長くなってきたので省略したいくらいNinjaたちには不評でした。オンラインが駄目っていうよりは時世の変化の影響が強いです。<br /> 参加してるNinjaたちのシチュエーションに合わせたオンライン環境を運営者側でうまく用意することができれば継続していくことはできそうですね。</p> <h3 id="行動することで変化すること"><a href="#%E8%A1%8C%E5%8B%95%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E5%A4%89%E5%8C%96%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8">行動することで変化すること</a></h3> <p>大人はなんというか、ほしい物、必要な物があると、頑張って働いたりコツコツ貯金したりゴメンナサイしたりして買って手に入れますよね。では未成年の時はどうだったでしょうか。なかなか難しかったりしますよね。ぼくも道を踏み外して踏み抜きました。<br /> さて、ここで回想には入らずに、ここ数年のお話なんですが、どうもNinjaの経験と成長に比例して、手持ちのデバイスが増えたりレベルアップしたりしてるんです。あれっ? 髪切った? みたいな勢いで端末が新しくなるので、話題には事欠かないんですが、そういうことではなくて、とても大切なポイントです。</p> <p>最初に、未成年欲しい物があっても一人ではままならねえ、みたいな事を書きました。Ninjaたち各家庭でどのような経緯があったのかを知る由はないんですが、一人ひとりの行動の積み重ねが、身近な人々の何かを動かしたことは間違いないでしょう。でももしかしたらやっぱ偶然かも。自信が無くなってきたので、この話は以上です。</p> <h2 id="Ninjaフォーエバー"><a href="#Ninja%E3%83%95%E3%82%A9%E3%83%BC%E3%82%A8%E3%83%90%E3%83%BC">Ninjaフォーエバー</a></h2> <p>CoderDojo紫雲は中学生が多いので、継続参加者向けのDiscordサーバを用意しています。みんな優しいので、ぼくがお知らせを通知しても、いつもそっとしておいてくれるんですが、志望校に合格したり、国家資格を取ったり、全国大会に出たりとかは、聞いてもいないのにガンガン投げつけてきてくれてとても嬉しいです。<br /> わしがそだてた! わしがそだてた! って言いたいので、これからも自分たちの道を広げながら、誉れを重ね続けていってほしいなあとおもいます。</p> <p>あと、今月27日はお待たせしました起死回生の、無いかとおもった? やったぜ、あります<a target="_blank" rel="nofollow noopener" href="https://dojocon2020.coderdojo.jp/">DojoCon Japan 2020 - Beyond the distance(距離を超えて) -</a> フルオンライン開催が控えていますので来て。<br /> <img src="https://64.media.tumblr.com/b5b5119da6a0652134aaeea340aa364f/e962fe3b57d0d1ac-b5/s640x960/b9be34f1835b022ae336e11c2a74ae85850d6b6d.png" alt="image" /></p> <p>明日は、<a target="_blank" rel="nofollow noopener" href="https://adventar.org/calendars/4952">CoderDojo Advent Calendar 2020 - Adventar</a> の7日目です。たぶん。</p> fkuMnk