tag:crieit.net,2005:https://crieit.net/tags/RemoteDevelopment/feed 「RemoteDevelopment」の記事 - Crieit Crieitでタグ「RemoteDevelopment」に投稿された最近の記事 2019-06-08T16:56:35+09:00 https://crieit.net/tags/RemoteDevelopment/feed tag:crieit.net,2005:PublicArticle/15075 2019-06-08T10:30:51+09:00 2019-06-08T16:56:35+09:00 https://crieit.net/posts/VSCode-Remote-Development-Docker-PHP VSCodeのRemote DevelopmentでDocker内のPHPでデバッグしてみた <p>VSCodeのStable版でRemote Developmentのプレビュー版が使えるようになったので先日Node.jsで試してみましたが、PHPのXdebugによるデバッグも試してみました。</p> <p>Remote Developmentの拡張機能のインストールは下記の記事と同じです。</p> <p><a href="https://crieit.net/posts/VSCode-Remote-Development-Docker-Node">VSCodeのRemote DevelopmentでDocker内のNodeでデバッグしてみた</a></p> <h2 id="サンプルのプロジェクトをclone"><a href="#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92clone">サンプルのプロジェクトをclone</a></h2> <p>PHPにもサンプルのプロジェクトがありますので、そちらをcloneしてきます。</p> <pre><code class="bash">git clone https://github.com/microsoft/vscode-remote-try-php.git </code></pre> <h2 id="プロジェクトを開く"><a href="#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%96%8B%E3%81%8F">プロジェクトを開く</a></h2> <p>cloneしてきたフォルダを開いたら、下記のボタンをクリックして<code>Remote-Containers: Open Folder in Container...</code>を選択します。フォルダを指定するとDockerイメージがビルドされ、コンテナの中でVSCodeが開き直され準備完了です。</p> <p><a href="https://crieit.now.sh/upload_images/28e24fe765e2a0dbb6e3e89900d3918e5cf91706ae5be.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/28e24fe765e2a0dbb6e3e89900d3918e5cf91706ae5be.png?mw=700" alt="" /></a></p> <h2 id="デバッグする"><a href="#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%99%E3%82%8B">デバッグする</a></h2> <p>基本的な準備はできたのでデバッグしてみます。下記のように、適当な箇所にブレークポイントを設置します。</p> <p><a href="https://crieit.now.sh/upload_images/4ecfb0ac2503416ad07f4c7d9620ef8d5cfb0c4807a61.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4ecfb0ac2503416ad07f4c7d9620ef8d5cfb0c4807a61.png?mw=700" alt="" /></a></p> <p>デバッグをスタートするためF5を押すか、下記のようにデバッグメニューの実行ボタンをクリックします。</p> <p><a href="https://crieit.now.sh/upload_images/f3db7426d5d8684f8112eb66c62da5885cf91773d62fa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f3db7426d5d8684f8112eb66c62da5885cf91773d62fa.png?mw=700" alt="" /></a></p> <p>問題なければ下記のように停止し、変数の中身を見ることができます。</p> <p><a href="https://crieit.now.sh/upload_images/36e18a1d895be4a3b29aef373ded02a85cfb0d08565d8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/36e18a1d895be4a3b29aef373ded02a85cfb0d08565d8.png?mw=700" alt="" /></a></p> <h2 id="ブラウザアクセスでデバッグする"><a href="#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%99%E3%82%8B">ブラウザアクセスでデバッグする</a></h2> <p>上記の方法だと、コマンドラインでの実行としてのデバッグになりますので、ブラウザでアクセスしてもブレークポイントで停止できません。そのため、サーバーとしての動作でも止められるように<code>.vscode/launch.json</code>のconfigurationsに下記のような設定を追加します。</p> <pre><code class="json"> { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000 }, </code></pre> <p>次にデバッグメニューでその設定を選択して起動します。するとXdebugのListenがスタートします。</p> <p><a href="https://crieit.now.sh/upload_images/64713afd46590527e2d2ed510d190e425cfb0df87ec71.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/64713afd46590527e2d2ed510d190e425cfb0df87ec71.png?mw=700" alt="" /></a></p> <p>次に、プログラムをサーバー起動させます。これでブラウザからアクセスできるようになります。</p> <pre><code class="bash">php -S localhost:8000 </code></pre> <p>これで<code>http://localhost:8000</code>にブラウザアクセスすると先程の同様にブレークポイントで止まります。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>通常の開発にはあまり使わないかもしれませんが、フレームワークの中の処理を追いたいとか、APIやテストの開発時には便利そうですね。また他の言語も試してみたいと思います。</p> だら@Crieit開発者 tag:crieit.net,2005:PublicArticle/15071 2019-06-06T22:53:45+09:00 2019-06-08T10:32:43+09:00 https://crieit.net/posts/VSCode-Remote-Development-Docker-Node VSCodeのRemote DevelopmentでDocker内のNodeでデバッグしてみた <p>VSCodeのStable版でRemote Developmentのプレビュー版が使えるようになったので試してみました。とりあえずDockerコンテナ内のNode.jsでブレークポイントを貼ってデバッグしてステップ実行したりするところを試しました。</p> <p>基本的には下記のマニュアルどおりにやればいいのですがちょこちょこつまづいたり冗長な部分もあるのでとりあえず最小で試すところを書いてみます。</p> <p><a target="_blank" rel="nofollow noopener" href="https://code.visualstudio.com/docs/remote/remote-overview">Visual Studio Code Remote Development</a></p> <h2 id="Remote Developmentをインストール"><a href="#Remote+Development%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">Remote Developmentをインストール</a></h2> <p>まずはRemove Developmentの拡張機能をインストールします。これをインストールするとSSH、コンテナ、WSL用の拡張機能も同時にインストールされます。</p> <p><a href="https://crieit.now.sh/upload_images/9b96c3d4b9b876ae035fecd6b003731b5cf914c359db5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9b96c3d4b9b876ae035fecd6b003731b5cf914c359db5.png?mw=700" alt="" /></a></p> <h2 id="サンプルのプロジェクトをclone"><a href="#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92clone">サンプルのプロジェクトをclone</a></h2> <p>下記がコンテナの場合のマニュアルです。</p> <p><a target="_blank" rel="nofollow noopener" href="https://code.visualstudio.com/docs/remote/containers">Developing inside a Container using Visual Studio Code Remote Development</a></p> <p>ここに書かれているように、試す用のGitHubリポジトリがいくつか用意されています。Visual Studio Code用の設定や、Remote Development用の設定も含まれているため簡単に試すことができます。今回はこれを使って試していきます。Node.js用のvscode-remote-try-nodeというリポジトリをcloneしてきます。</p> <p>ただ、2019/6/6現在Dockerイメージ作成でエラーになって失敗するようですので、.devcontainer/Dockerfileのベースイメージだけ<code>node:10</code>から下記に変更して最新のものがインストールされるようにしておきます。</p> <pre><code class="dockerfile">FROM node </code></pre> <h2 id="プロジェクトを開く"><a href="#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%96%8B%E3%81%8F">プロジェクトを開く</a></h2> <p>まずは普通にcloneしてきたフォルダをVSCodeで開きます。次に、下記画像のようにステータスバーの一番左にRemote Development用のメニューが追加されていますのでここで<code>Remote-Containers: Open Folder in Container...</code>を選択すると初回のみDockerイメージがビルドされ、そのイメージのコンテナ内としてVSCodeが開きなおされます。(ちなみにdocker-compose.ymlがあればそちらからの起動を選択したりもできるみたいです)</p> <p><a href="https://crieit.now.sh/upload_images/28e24fe765e2a0dbb6e3e89900d3918e5cf91706ae5be.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/28e24fe765e2a0dbb6e3e89900d3918e5cf91706ae5be.png?mw=700" alt="" /></a></p> <h2 id="デバッグしてみる"><a href="#%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">デバッグしてみる</a></h2> <p>準備はできたのでデバッグしてみます。まずはブラウザでページを開いた時の処理あたりにブレークポイントを貼ってみます。</p> <p><a href="https://crieit.now.sh/upload_images/1700b33c7d0bb188b2307401f8a462de5cf9188417da4.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/1700b33c7d0bb188b2307401f8a462de5cf9188417da4.png?mw=700" alt="" /></a></p> <p>左のメニューから虫のようなボタンを押してデバッグメニューを開きます。</p> <p><a href="https://crieit.now.sh/upload_images/f3db7426d5d8684f8112eb66c62da5885cf91773d62fa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f3db7426d5d8684f8112eb66c62da5885cf91773d62fa.png?mw=700" alt="" /></a></p> <p>緑色の実行ボタンを押すとデバッグが始まります。開始したら <code>http://localhost:3000</code> にアクセスするとページ表示が始まり、先程のブレークポイントのところで停止します。ここでresやreqの変数などを見ることができたりします。おわったらVSCodeの上部に停止ボタンが出ているので止めます。</p> <p><a href="https://crieit.now.sh/upload_images/36e18a1d895be4a3b29aef373ded02a85cf91944490c1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/36e18a1d895be4a3b29aef373ded02a85cf91944490c1.png?mw=700" alt="" /></a></p> <p>これで最小の確認は完了です。</p> <h2 id="TypeScriptの場合"><a href="#TypeScript%E3%81%AE%E5%A0%B4%E5%90%88">TypeScriptの場合</a></h2> <p>おまけとしてTypeScriptの場合ですが、tsconfig.jsonで<code>sourceMap</code>を<code>true</code>にします。あとはts-nodeで実行するか、もしくはビルド用のタスクを作ってlaunch.jsonの<code>preLaunchTask</code>にそのタスクを指定すれば同様に試すことができます。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>この様な感じでDockerコンテナ内のシステムを使って動かすことができました。やはりデバッグやテスト実行が思いつく限り一番有用な気がしますが、他にも色々と便利な使い方はできそうな気がします。</p> <p>個人的にはいろんなコンテナの処理を実行したいな、という場合もある気がするので中で起動するのではなくて一部だけ中で実行する、のような連携がもっと簡単にできればいいなぁと思いましたが、とりあえずPreview版ですので今後にも色々期待したいと思います。</p> <p>PHPも下記で試してみました。<br /> <a href="https://crieit.net/posts/VSCode-Remote-Development-Docker-PHP">VSCodeのRemote DevelopmentでDocker内のPHPでデバッグしてみた</a></p> だら@Crieit開発者