VS Code デバッグ環境 on Windows
VS CodeでKotlin, C#, VB.NET, Javaを動かす環境構築メモ。
Extensions
.NET(C#, VB.NET)
1.Visual Studio 2019をインストール
C# 6.0(VS2015)から追加された「String Interpolation」を使用するため
※VS2019のコンパイラじゃなくてもいいなら2へ
String Interpolation(文字列補間)はこんなやつ
var x = 10; var y = 20; // C# 6.0以降 var str1 = $"{x}, {y}"; // C# 5.0以前 var str2 = string.Format("{0}, {1}", x, y);
2.環境変数のPathに追加
Code Runner実行時(コンパイル時)のコマンドcsc
やvbc
で
Visual Studioのコンパイラを使用するよう設定
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn
string.Formatでもいい場合はVS2019をインストールしなくても
下記をPathに追加すればOK
※下記のパスやコンパイラがあるか要確認
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Kotlin
下記を参照
Java
1.JDKをインストール
2.環境変数のPathに追加
※Versionは確認して適宜変更
C:\Program Files\Java\jdk1.8.0_60\bin
3.settings.jsonを編集
{ "java.home": "C:\\Program Files\\Java\\jdk1.8.0_60", }
Code Runner
下記参照
executorMapByFileExtension
の.vb
や.kt
executorMap
のjava
やcsharp
のように設定すればOK
{ "code-runner.runInTerminal": true, "code-runner.saveFileBeforeRun": true, "code-runner.cwd": "C:\\work", "code-runner.executorMapByFileExtension": { ".vb": "cd $dir && vbc /nologo $fileName && $fileNameWithoutExt", ".vbs": "cscript //Nologo", ".scala": "scala", ".jl": "julia", ".cr": "crystal", ".ml": "ocaml", ".exs": "elixir", ".hx": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt", ".rkt": "racket", ".scm": "csi -script", ".ahk": "autohotkey", ".au3": "autoit3", ".kt": "cd $dir && kotlinc $fileName -include-runtime -d $fileNameWithoutExt.jar && java -jar $fileNameWithoutExt.jar", ".kts": "kotlinc -script", ".dart": "dart", ".pas": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", ".pp": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", ".d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt", ".hs": "runhaskell", ".nim": "nim compile --verbosity:0 --hints:off --run", ".csproj": "dotnet run --project", ".fsproj": "dotnet run --project", ".lisp": "sbcl --script", ".kit": "kitc --run" }, "code-runner.executorMap": { "javascript": "node", "java": "cd $dir && javac -encoding UTF-8 $fileName && java $fileNameWithoutExt", "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "php": "php", "python": "python -u", "perl": "perl", "perl6": "perl6", "ruby": "ruby", "go": "go run", "lua": "lua", "groovy": "groovy", "powershell": "powershell -ExecutionPolicy ByPass -File", "bat": "cmd /c", "shellscript": "bash", "fsharp": "fsi", // csのdefault //"csharp": "scriptcs", //"csharp": "cd $dir && csc /nologo $fileName && $fileNameWithoutExt", // C#のバージョンを指定する際は「/langversion:7.0」や「/langversion:latest」のようにoption追加 // 指定できるバージョンの確認は「csc /langversion:?」 "csharp": "cd $dir && csc /nologo /langversion:latest $fileName && $fileNameWithoutExt", "vbscript": "cscript //Nologo", "typescript": "ts-node", "coffeescript": "coffee", "scala": "scala", "swift": "swift", "julia": "julia", "crystal": "crystal", "ocaml": "ocaml", "r": "Rscript", "applescript": "osascript", "clojure": "lein exec", "haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt", "rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt", "racket": "racket", "scheme": "csi -script", "ahk": "autohotkey", "autoit": "autoit3", "dart": "dart", "pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", "d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt", "haskell": "runhaskell", "nim": "nim compile --verbosity:0 --hints:off --run", "lisp": "sbcl --script", "kit": "kitc --run" } }
これで4つの言語をVS CodeのCode Runnerで動かせます。
お試し環境の構築完了。
Where <-> filter #Kotlinコレクション操作01
Kotlinのコレクション操作シリーズです。
.NETのWhere()はKotlinだとfilter()だそうで。
Javaと同じですね。
整数1~10を持ったリストを偶数と奇数に分けるサンプルです。
C# / VB.NET
using System; using System.Collections.Generic; using System.Linq; namespace LinqSample { class Program { static void Main(string[] args) { var myNums = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; var myEvenNums = myNums.Where(x => x % 2 == 0); // 偶数 var myOddNums = myNums.Where(x => x % 2 == 1); // 奇数 Console.WriteLine($"Even nums : [{String.Join(", ", myEvenNums)}]"); Console.WriteLine($"Odd nums : [{String.Join(", ", myOddNums)}]"); } } }
Imports System.Collections.Generic Module MainModule Sub Main() Dim myNums As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} Dim myEvenNums = myNums.Where(Function(x) x Mod 2 = 0) '偶数 Dim myOddNums = myNums.Where(Function(x) x Mod 2 = 1) '奇数 Console.WriteLine($"Even nums : [{String.Join(", ", myEvenNums)}]") Console.WriteLine($"Odd nums : [{String.Join(", ", myOddNums)}]") End Sub End Module
Kotlin
fun main(args: Array<String>) { val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val evenNums = nums.filter { x -> x % 2 == 0 } // 偶数 val oddNums = nums.filter { x -> x % 2 == 1 } // 奇数 println("Even nums : [${evenNums.joinToString(", ")}]") println("Odd nums : [${oddNums.joinToString(", ")}]") }
Java
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.*; class StreamSample01 { public static void main(String args[]) { List<Integer> nums = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); Stream<Integer> evenNums = nums.stream().filter(x -> x % 2 == 0); // 偶数 Stream<Integer> oddNums = nums.stream().filter(x -> x % 2 == 1); // 奇数 System.out.println("Even nums : [" + String.join(", ", evenNums.map(x -> x.toString()).collect(Collectors.toList())) + "]"); System.out.println("Odd nums : [" + String.join(", ", oddNums.map(x -> x.toString()).collect(Collectors.toList())) + "]"); } }
う~ん、Javaはソースコードが長くなっちゃいますね。。。
Kotlinはすっきりと書けます。
パッと見も気持ちいいですね。
LINQ, StreamAPIとの対比表 #Kotlinコレクション操作00
今までC#をずっとやってきてLINQをあたりまえのように使ってるので
他の言語を勉強する際に気になるのがやはりコレクションの操作とラムダ式。
なのでコレクションの操作についてメモ。
環境
お試し環境は下記を参照。
対比表
C#とKotlinの対比表です。
とりあえずLINQ (Language Integrated Query) でよく使うメソッドです。
ついでにJavaも。
下記のリンク先ではVB.NETのサンプルあり。
(今の現場がVB.NETでチームメンバーのお役に立てればと)
No | .NET [C# / VB.NET] | Kotlin | Java | 機能 |
---|---|---|---|---|
01 | Where | filter | filter | 抽出 |
02 | Select | map | map | 射影 |
03 | SelectMany | flatmap | flatmap | 平坦化して 射影 |
04 | Any | any | anyMatch | 条件を満たす要素があるかを返す |
05 | Count | count | count | 要素数を返す |
06 | First FirstOrDefault |
first firstOrNull |
findFirst | 最初の要素を返す |
07 | Last LastOrDefault |
last lastOrNull |
- | 最後の要素を返す |
08 | Single SingleOrDefault |
single singleOrNull |
唯一の要素を返す | |
09 | Skip | drop | skip | 先頭から指定数スキップした残りの要素を返す |
10 | SkipWhile | dropWhile | - | 先頭から指定条件を満たさなくなるまでスキップした残りの要素を返す |
11 | Take | take | limit | 先頭から指定数分の要素を返す |
12 | TakeWhile | takeWhle | - | 先頭から指定条件を満たす要素を返す |
13 | OrderBy OrderByDescending |
sortBy sortByDescending |
sorted | ソート |
14 | ThenBy ThenByDescending |
- | - | ソートしたものに対してソート |
15 | GroupBy | groupBy | Collectors.groupingBy | グループ化 |
16 | Distinct | distinct | distinct | 重複なし要素を返す |
17 | Max | max | max | 最大値を返す |
18 | Min | min | min | 最小値を返す |
19 | Sum | sum | IntStream.sum | 合計を返す |
20 | All | all | allMatch | 全要素が条件を満たすかを返す |
とりあえず対比表だけです。
サンプルコードは徐々に更新していきます。
対比表の「No」がリンクになっていればサンプルコードありです。
SSDなしのMacBook Proを入手
今回のネタは技術的なことではないですが、
Macで開発してみたいと思ったのでMacBookを探していました。
で、見つけたのが
MacBook Pro (13-inch, 2016, Two Thunderbolt 3 ports)
[i7, RAM 16GB, SSDなし, TouchBar非搭載, US Key]
でした。
某オークションで入手したのですが、商品詳細には
「筐体キズあり、画面キズあり、充電器なし、底面ネジ1個なし」と書かれておりました。
ただ実際届いて確認してみたところ、そこまで気になるようなキズではなく
意外とキレイでびっくり。
で、SSDは別で入手したのですが、2016モデルからいろいろと
ガラっと変わったみたいで、2016モデルはTouchBar非搭載じゃないと
SSDを換装できないようです!
さらにコヤツ専用のSSDしか使えないと。。。
なのでAmazonや某オークションサイトなどでいろいろ探してたのですが
えれぇたけぇ!
おでれぇたぞぅ!!!
まぁメインPCとしては使うつもりはなかったので256GBで十分かなと。
ココにもお金はかけたくなかったのでアリババのサイトでの購入も考えたのですが
まず今までそのサイトで購入したこともなかったですし
いきなりそこでSSDを購入するのも冒険やなと思い
今回はやめておきました。。。はいチキンです(笑)
SSDを付ける
結局、これまた某オークションサイトでちょいと値切って購入。
とりあえず本体とSSDは同じ日に届いたのですぐに取り付けました。
が、蓋を開けるのに少し苦労しました。
私自身忘れそうなので一応残しておきます。
(まぁググったらようさん出てきますが)
上記の箇所で止まってるようなので
まずは吸盤で下の方を少し浮かし、少し上に力を加えて
真ん中の4つを外します。(上げすぎたらダメ!!!)
で、楕円で囲んでいる箇所が、がっつりツメでロックされてるようなので
下の写真のように少し浮かせた状態にします。
で、この状態のまま矢印の方にググっと力を入れて引っ張ります。
※裏蓋の写真撮り忘れたのでまた蓋を取ることがあれば。。。
あと、これ見てやろうと思った方、やるなら自己責任でお願いします。
なんとか開きました。
おぉ~こんなんなんや~。。。
SSDはココですね~。
取り付けるとこんな感じに。
SSD取り付けるネジが1個(右側)バカになってると聞いてたので
不安でしたが取り合えずドライバ突っ込んで回ったので
緩めに止めてる状態。。。
起動
まぁ動きゃええんでとりあえず蓋をして電源ON!!!
ありゃ?普通に起動した!
あたしゃてっきりOSも自分で入れないとダメやと思ってたのでラッキーでした。
正直OS入ってないと思ってたので、どうやってインストールすりゃええんか
いろいろ調べてたのですが、不安になることしか書かれてなかったので
めっさ不安でした。。。
まぁサイアク、義姉の使われてないMacBookを借りてインストールメディアぐらい作れるか?
とか思いながら数日過ごしておりました。
(とは思いながらもごっさ不安でしたけどね。。。)
まぁ無事に起動したのでめでたしめでたし。
SurfaceとMacBook
メインで使ってるSurfacePro3と比べるとこんな感じ。
うん、いいね。
今日からにわかマカーです。
SSDなしMacBook購入時の事前確認
- MacBookのモデルに合ったSSDを入手可能か
- 購入するSSD(またはHDD)にOSが入っているか
- OSが入っている場合、アカウントやパスワードはなにか
- Appleサポートは受けられないが問題ないか
- キズなどある場合、許容できるレベルか(モニタ、キーボード、パームレストなど)
SSDなしMacBookは新しめのモデル(2016以降)ですとあまり出回っていない感じがしますが
それでもキレイな筐体であれば価値はあるのかなと思います。
SSDありMacBookの中古で同じモデルのもの(筐体も少しキズがある程度)を
オークションとかで見ていても、私が購入した価格より4~5万は高い感じですし
美品となると7~10万は高いのでお得感がありますね。
同じモデルでも目立つようなキズやシール跡があるもので10万前後ぐらいですかね。
ただ、TouchBarはどうしても必要ということであれば
SSDなしは出てこないため(ロジックボードにSSDが固定されている)
あきらめるしかなさそうです。
KotlinをVS Codeで動かす
最近Kotlinを勉強中です。
普段は仕事でC#やVB.NETをメインに使ってますが
Kotlinならどう書けるの?的なことをメモで残していこうかと。
Androidやサーバーサイドで数年前からKotlinがアツイ感じなので
少し遅れてですが使えるようにしておこうかと。
数年はAndroid案件にも携わってたことがありますし
個人的に自分専用のアプリ作ったりはしてますので
まずはKotlinでAndroidのTodoアプリをサクっと作ってみました。
ただただタスクの追加、編集、削除ができるだけのモノですが
Androidのスキルアップも兼ねてちょこちょこ更新していきます。
ただ、勉強する上でちょっとお試しでKotlinコード書きたいな~
ってときにちと困るんですよね~。
ということで、まずはKotlinお試し環境を作るってことで。
- Windows 10 Pro
- Visual Studio Code 1.37.0
- Java 1.8.0_181
※JDK入ってるものとします。
次にVS Codeの拡張をインストール
- Kotlin [0.2.10]
- Kotlin Language [1.7.0]
- Code Runner [0.9.14]
とりあえずHello Worldを表示します。
fun main(args: Array<String>) { println("Hello Kotlin ! ") }
ファイル場所に移動し、下記コマンドを実行。
$ kotlinc hello.kt -include-runtime -d hello.jar bash: kotlinc: command not found
またはVS CodeのCode Runnerを入れて実行。
C:>cd "c:\work\Kotlin\Sample01\" && kotlinc hello.kt -include-runtime -d hello.jar && java -jar hello.jar 'kotlinc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
※デフォルト設定ではCode Runnerで実行するとOutputに出力されますが文字化けします。
対策はコチラを参照してください。
で、本題に戻りますが、kotlincが認識されてねぇと。
そりゃそうだ。コンパイラ入れてねぇもん。
てことで、Kotlinをインストールしましょう。
下記から最新をダウンロード
C:\Program Files直下にkotlincを移動
環境変数のPathに追加
C:\Program Files\kotlinc\bin
さて、もっかい実行!!!
$ kotlinc hello.kt -include-runtime -d hello.jar $ java -jar hello.jar Hello Kotlin !
出た!
環境作る前にとりあえず動かした~い!
という方はコチラでどうぞ。
ブラウザ上で動かせます。
Code Runnerで文字化け #VS Code 02
Kotlinの環境構築の際に、Code Runnerで実行すると
OUTPUTウィンドウで文字化けが発生。
この文字化けを解決する方法がすぐには見つからなかったので
とりあえず出力結果をTerminalウィンドウへ出すよう設定を変更。
Ctrl + ,
で設定を表示。
Run In Terminal
のチェックをONに。
これでソースコード上で右クリックし、Run Code
を選択すると
Terminalウィンドウに出力されるようになります。
VS Codeで良く使うショートカット(以前、会社のブログで紹介しました) aimek-developer.blogspot.com
デフォルトTerminal変更 ymdevx3.hatenablog.com
デフォルトTerminal変更 #VS Code 01
VS CodeのデフォルトTerminalを変更する設定です。
Ctrl + ,
で設定を開き、「Search Settings」に「terminal」と入力。
「Terminal > Integrated > Shell: Windows」の「Edit in settings.json」を選択。
{ // cmd "terminal.integrated.shell.windows": "C:\\Windows\\sysnative\\cmd.exe", // PowerShell // "terminal.integrated.shell.windows": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", // Git Bash //"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe", }
上記3つのうちデフォルトに設定したいモノをコメント外して使えるようにしてます。