見出し画像

Retro-gaming and so on

初めて学ぶ言語は(今は)Rubyが良い

ザーッとgoo blogをタグ検索してみたんですが。
あんまプログラミングのトピックって無いんですよねぇ。
まぁ、当然か。辛うじてVBとかPythonがヒットする、って程度。
マトモなプログラマだったら、こんなヘナチョコなブログ使わんよなぁ。
絶対はてなへ行く。まぁ、個人的にははてな使った事ないんだけど、あれだけプログラマ系が集ってるトコ見ると、やっぱ使いやすいんでしょ。
昔はてなで今Qiita、ってトコかいな。

さて、全くプログラミング未経験の人がプログラミングを学びたい場合。もちろん、学校で、とかじゃなくって、自習したい、とする。
じゃあどのプログラミング言語で?って話になる。
本音言うと何選んでも大して変わらん、たぁ思うんですけどね。JavaScriptじゃなければ。ネットに情報が溢れてるし、どれ選んでもそんなに酷い事にはならんと思うんだ。JavaScriptじゃなければ
ちと昔話をしようか。

1990年代前半辺りまで。「今からプログラミングを勉強したい!」と言う場合、コストがかかった。この当時だと、「プログラミング言語を勉強したい」って事、イコール「なんらかの言語処理系を金払って買わなければならない」って事だったの。
当時だと、メジャーなトコだと二つの言語処理系があった。両方ともボーランド、って会社の製品で、結局、「プログラミングを勉強したい」ってのは、そこの会社が出してるTurbo CTurbo Pascalか、どっちかを買え、って意味になってたのね。まだ当時はMicrosoftはOSメーカーではあるけど、マジメな言語ベンダーとは思われてなかったんで(主力製品がBASICしかなかった)、結局、このボーランドってメーカーの寡占状態だったわけ。
そして、Turbo CもTurbo Pascalも10万円くらいしたんじゃなかろうか。高ッ!って思うでしょ?でも当時はそれが当たり前、だったんだ。
ちなみに、これでも安い、って思われてたのよ。
実は今でもそうなんだけど、プロの特殊領域のエンジニア用の言語処理系、っつーのは、本来100万円レベルの商品なのね。サポートも色々あるしさ。売る相手は原則個人、じゃなくって会社だったし。本来ならそれくらいの値段がするものなんだけど、そういう「価格設定の世界」では、10万円はむしろ安かったのよ。
いずれにせよ、当時の「プログラミング言語を勉強したい」人たちってのは文字通りまずは安くない身銭を切らなきゃならなかった。真剣度が今の人たちと全然違ったわけ。10万円だぜ?ポンと出せる金額じゃねぇしな。
だから勉強する前にリサーチするわけよ。どっちを買うのがより将来性があるのか、と。こういう時期の「何の言語を勉強すれば良いですか?」と言う問は重みがあったのです。当然だわな。ある種背水の陣ですし。
そして、「将来性」って意味ではその時点では決着が結果付かなかったんだ。決着が付いたのはMicrosoftがWindows 95を発表して以降、(実はそれ以前にWindows用にリリースしてた)Visual C++がポピュラーになってから、だな。皆がMS-DOSを捨てて、Windowsに移行してから。

「OSベンダーのMicrosoftがリリースしてるんだったらOSとも親和性も高いだろう」

ってんで全員がMicrosoft製品に切り替えて、からなのです。
そういう意味では、前にも言ったけどUNIXって何も関係ないの。C系言語を第一にした、ってのはMicrosoftの功績であって、UNIXなんざ全然関係無かった。単にCがUNIX上で作られた、ってだけでね。
そして、Microsoftは見事、ボーランドの領域だった商売を丸々手中に収めるわけだ(笑)。そしてボーランドは凋落するんだな。

ちなみに、私的な意見なんですが、CとPascalとどっちが良いのか?っつーと、高級言語だ、って観点から言うとPascalの圧勝です。ローカル関数も使えないような言語を高級言語なんざ呼びたくない(笑)。いや、Cはホント、機能的に考えると低レベルなんですよ。
ただし、ハードウェアにより近い操作はCの方が得意。今じゃあ大したメリットじゃないんだけど、当時はクリティカルだったんだよね。何故なら、パソコンってのがメチャクチャ貧弱だったから。逆に言うと、パソコンが今みたいに高機能ならCにこだわる必要がない。
実際、MITみたいに金があって、良いミニコンを使ってる場所だと選択肢としてはCなんかあんま使われなかったわけね。だからLispみたいな超高級言語をそこではガンガン使ってて、プログラミングの領域を広げていけたわけ。
まぁ、PascalもPascalでちとスマートじゃないトコがあって、記述って意味で言うとCよりハードウェアレベル・・・と言うよか、コンパイラ向けに現代で考えると「え?」って思うようなメンド臭い記述法を要求したりはします(と言うより、構造的にはワンライナーなんじゃ?とか思う)。
Pascalは「一回ソースファイルを走査すればすぐに実行形式を作れる」って特徴があって、Cみたいに何度もソースファイルを走査する必要がない。ただ、それを実現する為には結構文法が厳格なんですよ(変数定義の順番が厳密に決められてたりする)。Cに比べるとあまり自由度がない。一方、そのお陰でCよりもコンパイル時間が短い。当時のパソコンは貧弱だったので、Pascalですぐ終わるコンパイルもCだと何倍も時間がかかった、なんてぇ事も頻発したのです。
この当時のこの二つの言語、どっち選んでも痛し痒し、ってのがあったんだよなぁ。しかし選択肢はいずれにせよ、「二つしかなかった」のです。

んで飛んで現代。今だと「無保証」を了承すれば、色んなプログラミング言語をタダで入手出来ます。かつてみたいに「生死を賭けて」プログラミング言語なんざを学ばなくて良いのです。金がかからん以上、いつ飽きて止めても良い。そういう世の中だと、「何のプログラミング言語を学べば良い?」って質問はマジで空虚なんですよ。「好きにすれば?」としか言いようがない(笑)。敢えて言ってもJavaScriptだけは止めとけよ、で終わりです。

んでだ。
教えて!gooなんかだと周期的にこのテの質問が投下されるんだよな。主に冬と夏。あと、3月辺り、か。要するに学生さんが休みの時にこのテの質問が増える(笑)。要するに暇つぶしだろうね。
まぁ、自習でやってみたい、ってぇのなら、概要、要するに「プログラミングの全体像」を如何に素早く学べるか、ってのが鍵になる。んで、それで考えるとCはまず向かないです。Cでプログラミングの概要としての全体像を把握するのには時間が掛かりすぎます。あまり本質的じゃない、やらなければならない余計な事柄が多すぎる。
理想としては2週間程度で一通りの概要を学べる事。となると、言語選定として恐らく現時点でベストだ、って言えるのは次の二つの言語に絞られるのではないでしょうか。
  • Python
  • Ruby
両者ともいわゆるスクリプト言語ですし(※)、誤解を畏れずに言うと「似たような」言語です。そして、Python、Ruby共にメリット・デメリットがある。

5年以上前だと即Python薦めてたのね。理由は以下の通り。

Pythonのメリット:
  1. 字下げ(インデント)によるブロック構造。
  2. 「やり方はなるたけ一つで良い」によるシンプルな文法
  3. 1.と2.による「誰がコードを書いても似たような結果になる見た目」
  4. インタプリタである事
  5. オールインワンである事
  6. 比較的、OS等の「環境」からは独立している事
2番は結構初心者には重要で・・・例えばC言語のようにif〜elseがありながらswitch文がある、ってだけで初心者にはメンド臭いのね。Pythonはこういう「意味的にも機能的にも重複してる」構文は中庸的に纏めちゃってる。だから初心者が悩まなくて済むような設計になってる。
そして、意外と5番は大きい。「インストール即実行出来る」ってのは重要。
Python備え付けのIDLEに対する「プロの評価」ってのは厳しいでしょう。それは分かる。そんなヘナチョコなIDE使うんだったら自分が使ってるお気に入りのIDEの方が良い、ってのも良く分かる。
でも、この世界に飛び込んできた際、初心者にとって「IDEの設定をしろ」ってのは極めてメンド臭い。早くプログラミングを始めたいのに、何だか良く分からん「設定」に時間を潰される。プログラミングの本懐到達する前に、ヘタすれば挫折である。それくらい「環境設定」ってのはメンド臭いんです。

余談だけど、何故にLispが人気無いのか、ってのもここに理由があります。誰も彼もがGNU Emacsを使い、Emacsを使ってない人を追い出す構造になってるから。ハッキリ言うとデフォルトで備え付けのIDEがあったらんな事にはなってないんですがね。「ちょっと触ってみて感触が分かる」事さえ出来ないから、Lispは人気がない。そして、僕も例外ではなく、最初メチャクチャ苦労しました。環境設定に時間掛かりすぎ。
そして、だからこそ現代的なIDEを備え付けてるRacketはLispではダントツで人気があるんです。Racketが世界で一番使われてるLisp処理系になってる理由は、ハッキリ言うと、デフォルトのIDE(Dr. Racket)のお陰。それ以外には無い。そしてその事実からLisperは目を逸らし続けてます。

6. も結構大事。Pythonは特定のOSに染まったようなトコが無い。WindowsだろうとLinuxだろうと、はたまたMacだろうと「溶け込んで」います。
理由の一つは出自、でしょうね。元々はオランダの実験用OS、アメーバ(Amoeba)上で生まれた言語なんで、極マイナープラットフォームで生まれたせいか、特に主張がないんです。だから変な外部要因による「様式」を強調しない。

ただ、5年以上前だと実はPythonは日本ではそこまで人気がなかった。いや、今のPython人気はむしろビックリですよ。5年でこうも変わるんか、ってのがある。
と言うのもPythonはPythonなりの・・・デメリットがあったし、今もあります。

Pythonのデメリット:
  1. 「やり方はなるたけ一つでいい」割には既に結構複数のやり方がある
  2. (5年以上前だと)Python2.x系とPython3.x系のどっちが主流になるんだかサッパリ分からなかった
  3. ライブラリはPython2.x系の方が豊富で実用性だとこっちが上だと思われていた
  4. 反面、Python2.xはUnicode系に弱く、日本語処理に信用が置けなかった
  5. Python3も日本語処理が最終的な面まで、は信頼出来ない
  6. いつ突然の仕様変更が行われるか分からない
  7. ラムダ式がヘナチョコである
とにかく仕様がハッキリしない、今後どうなるか分からない、日本語対応が弱い、ってのは確かに推薦するにはツラい言語でもあったんですよ。ただ、それでも文法の簡易さ、そして備え付けのIDEがある、ってのは魅力的だった。
一番大きかったのが、かつてのPythonJPだとインスタントハッキングインスタントPythonって文書が公開されてたのね。この2つは非常に短くプログラミングの世界に誘ってくれた。本格的にプログラミングを始めたい、って前に全概要掴むには丁度良かったんですよ。これをサッと出来るヤツはプログラミングが出来るだろうヤツ、これでダメならどんなに頑張ってもダメだろう、ってカンジ。
でもそれはPython2.x用に記述されたモノであって、3.x用ではない。そしてPythonJPはその文書を削除して久しいです。
基本的にこれだけPythonが認知されちゃうと、逆に「初心者を誘うには?」にはあまり尽力しないようになるみたい。
そして言語の出来の良さもあるけど、何はともあれ、ネットで「タダで」読めてサッと終われるチュートリアルがあるか否か、ってのはとても大きいのです。
と言うわけで、今は初心者向けにPythonを逆に薦めづらくなっちゃった。

さて。Ruby。こいつの特徴は次の通り。

Rubyのメリット:
  1. Pythonのオブジェクト指向はアドホックだが、Rubyは純粋オブジェクト指向である
  2. やり方は一つではない、の哲学でプログラマの進度によって色んなコードが書ける
  3. 高機能で、ぶっちゃけPythonに比べても高性能であり、いつまでも使える
  4. ISO/JISで仕様が確定してるため、「突然の仕様変更」がない(Ruby1.8基準?)

Rubyのデメリット:
  1. 備え付けのIDEが無い
  2. インタプリタがあるが、一見分かりづらい
  3. endだらけになって、Pythonに比べるとコードが縦に長くなる傾向があり、1画面からはみ出しやすい
  4. Pythonに比べるとライブラリは少ない
  5. UNIX生まれ、の特徴を引きずっているので、Windowsとの親和性がイマイチ(ただし問題になるほどでもない)
  6. Perl由来の変数名の付け方、とか「ん?」と思うトコがある
まず、それが最終的に正しいか否かはさておき、誰でもプログラミング言語を覚える際に「一生使い回せるような」モノを学びたい、と言う幻想を持ちます。
いや、マジで幻想ですよ?どんなに長くても、ある意味プログラミング言語の寿命は10年くらいだろ、って言った方が良いです。
その理由は、流行りが廃れる、って事が一つ。もう一つは、大体、公式仕様がある言語の場合、改訂まで10年単位くらいだ、って事が理由です。
しかし「出来るだけ長い期間使いたい」って場合、選択肢はほぼ、公式仕様を備えた言語になる、と思います。
プログラミング言語RubyはISO/JISで仕様が制定されたプログラミング言語です。
ここで、ISOやJISを知らない人の為に説明しておくと、ISOは国際標準化機構、JISは日本産業規格の事。どちらも公的機関での公的規格です。前者は国際版、後者は日本版、ですね。Pythonにはこういった仕様がない。
この国際規格なり、国内規格が保証する場合、簡単に言語構造を「変更する」事は出来ません。また、後方互換性等も考慮してて、一回書いたプログラムが変更なしに長く使える保証にもなるのです。だからこそ「最低10年は使える」。
現在、JISに絞ると、「公的仕様がある」プログラミング言語は次の11種類になります。
  1. Fortran
  2. COBOL
  3. FullBASIC
  4. Pascal
  5. C
  6. MUMPS
  7. ISLISP
  8. C++
  9. C#
  10. Ruby
  11. ECMAScript(JavaScript)
つまり、公的仕様で保証されたこれら言語だと、仮に仕様が変更された場合でも「公的に保証される」と言う事です。そして、それを名乗る言語処理系はそれぞれ、これらの「変更」でもお互い同じ動作をする、って事を保証されないといけない。まぁ、ある種理想論ですが、使う側のリスクは圧倒的に減ります。
要するに、プログラミング初心者さえ「出来るだけ長く使えるプログラミング言語を選びたい」場合、このリストから選ぶのが選択肢とするが吉、となる。そしてここから「現役っぽい」言語をまずは選べば良いです。
とは言っても、初心者向けを考えるとここから無作為に選ぶワケにはいかない。
例えば何度も書いてるけどまず圧倒的にCはダメ。っつーのも、良くあるパターンなのが、Windowsだと殆どVisual C++と言うC++に付随してるC言語処理系を使って学ぶ、って事になるんですが、これがマズい。
何故ならMicrosoftのC処理系は上のJISの規格を満たしてないのです。それよりも古い規格にしか適合していない(Microsoftとしては実はC++推しなので、C++の規格適合だけ頑張ってる)。
と言う事は、Cの「入門書」と言われる本の殆ども規格に適合せんで、「古い書き方」の本ばっか溢れてる、って事です。それじゃあダメだろって事を言っておきましょう。
あと、MUMPSってのも良く分からん。説明によると医療系プログラミングを行う為のプログラミング言語なんですが、これはさすがにニッチなんで外しておきます。
ポイントとしてはガベージコレクションを持ってる言語を選ぶ事。
ガベージコレクション(GC: Gabage Collection = ゴミ集め)、ってのはプログラミング初心者には聞き慣れない単語でしょうが、メモリの確保と解放を自動で行う機能です。これがあると無いとではプログラミングの難易度が大きく違います。プログラマが自分でメモリを管理する、ってのは至極クソメンド臭いのです。
大体、プログラミングではこの「メモリ管理」を間違うんで、いわゆるメモリーリークと言うバグ(例えばそのソフトを使ってると時間経過に従って非常に重くなって動作不能に陥ったりするアレです)はそれに起因します。
Pythonも当然ガベージコレクションを持ってるんですが、上のリストでガベージコレクションを持ってる言語は以下の通り。
  1. ISLISP
  2. C#
  3. Ruby
  4. ECMAScript(JavaScript)
この4つしかない。
んで、この中だとまずは、大変悔しいんですが(笑)、ISLISPは除外せざるを得ない。何故なら、前にもチラッと書いたんだけど、ISLISPは処理系が存在しない、って言っていいからです。仕様があっても実際に存在しないプログラミング言語なんか、どう逆立ちしたって使えるわけがない。よってこれは候補から除外します。
で、残り3つのどれ選んでもまずは構わないんですが、次の選択ポイントは静的型付けの言語動的な型付け言語なのか、って事がある。
静的型付け言語、ってのは変数やデータ型を使う前に「型を宣言しないとならない」言語です。これがなかなかクッソメンド臭い。大体、プログラムを書く前に今から使う変数が宣言出来るのか、っつーとまぁ、分かんねぇよなぁ。結果、新たなデータを使う前に大体のケースだとファイル冒頭に戻って宣言を付け足さないとならない。
反面、静的型付けの場合は、動的で書いたプログラムに比べるとバグが少なく、なおかつ比較的スピードが速いコードが書ける、と言う利点もあります。
まぁ、原則、静的型付け言語の利点ってのはプログラマ側には無いんですね。コンパイラに対して有利だとか、ユーザーにとって良くなる、と言う類の性質です。ただ、これが初心者向けかと言うとそれは違う。
動的型付け言語ってのは宣言を必要しない言語です。そして「型」は実行時に決まる。実行時に決まる為、処理速度はどうしても静的型付け言語に劣ります。型判定に時間を取られますからね。その代わり、プログラムを書き上げる速度は静的型付け言語の比ではないです。
いずれにせよ、プログラミング初心者にとっては動的型付け言語の方が有利で便利でしょう。結果、静的型付け言語であるC#をハジくと、選択肢は2つに絞られます。
  1. Ruby
  2. ECMAScript(JavaScript)
そして、ECMAScript(JavaScript)は仕様上、そのままだと何も出来ない言語です。何せこの言語には入出力が存在しない
実は、いわゆるブラウザを介しての入出力と言うのはJavaScriptの仕様の範疇外、なのです。この辺はDOMとかWebAPIと呼ばれる全く別の仕組みを使っていて、全然JavaScriptと関係がない
つまり、プログラミング初心者がJavaScriptを学ぶ際に、HTMLとかDOMとかWebAPIとの混成体を学ばされている。ハッキリ言うと、プログラミング初心者にとって複雑極まりないし負担が大きい、んです。それでヘーキでDOMとかWebAPIをJavaScriptの一部だと思いこむ。
だから止めとけ、っつってるわけです。
ブラウザで実行できるから簡単だぁ?そっちの方がよっぽどメンド臭いんだよ。
言い換えると、サイトを作った事があって、HTMLやCSSの経験者である場合はその限りではないでしょう。単に「全部同時に学ぶ」のがまっさらな初心者には難易度が高い、と言う事です。当然ですね。

というわけで「標準仕様の存在」から言うと、選択肢は結果Ruby一択です。もしこれが嫌なら、C#が恐らくマシでしょう。つまり推薦としては1にRuby、2にC#となる。もっともC#の「凄く良い入門書」ってのは知りませんが。

反面、Rubyにも難点はあります。まずやたら高機能であると言う事。これは他の言語にダウングレードする際、ちょっと困った事になる。Rubyで☓☓は簡単に出来るのに、この言語じゃ出来ないのか!とか言うストレスに直面するかも。
これはPascalとCなんかでも当てはまった問題です。Pascalだとローカル関数を使いまくって問題を処理できるのに、Cじゃ出来ない、クソだ、とか(笑)。そういう事はあるんですよ。言語Aで出来る事が言語Bで出来ない、となるとこれはストレスの原因になる。

あと、インタプリタが分かりづらいんですよね。Rubyの処理系にはirbと言うインタプリタが付いてくるんですが、これがパッと分かりづらい。結果、Rubyのプログラムを書く場合、コンパイラに対してコードを書くような作業に陥りやすいです。その辺、丁寧に説明してくれる本なりシステムがあればなぁ、とは思います。その辺Pythonの方がIDLEがあるから明解ですね。

ただし、Rubyには凄く良いチュートリアルがWeb上にある。1にプログラミング入門 - Ruby を使って -。2にホワイの(感動的)Rubyガイド。両者ともタダでWeb上で読めるのでオススメです。
前者はオライリーから本になってるくらいですね。非常に良く書けていて、全11章。非常に薄いチュートリアルで、2週間もあれば終わるし、2週間でプログラミングの全概要を掴める、ってぇのならこれはやっぱりオススメにならざるを得ない。
後者も良いチュートリアルですが、中で描かれてる漫画が汚くて日本人好みじゃないかもしんない(笑)。そんなワケでこれを次点としました。
とにかく、薄く、早く全概要をまずは知ること。要所要所の細かい部分は後で学べば良いのです。まずは一通り苦も無く出来る質と量であること。ここで挫折したら元々プログラミングには向いていない、のです。

さて、先にも書いた通り、RubyにはデフォルトでIDEが付いてない。これはちと初心者にはキツイ。
ただ、プログラミング入門 - Ruby を使って -に書いてる通り、SciTEと言うテキストエディタを導入する事をまずは奨めておいて、なおかつ、ある程度はこれを使い続ければ良いでしょう。
SciTEは日本ではイマイチ人気がないんですが、欧米辺りだとかなり人気があるUNIX系テキストエディタです。UNIX系、と書きましたがもちろんWindowsでも使えます。そして、極めて軽い。
SciTEが日本で人気がない理由。それはデフォルトでは日本語が使えないから。ただ、日本語を使うようにするのは結構簡単です。日本語設定を終えたらReady-to-go。F8キーで端末を開いてF5キーで書いたプログラムを実行。ラクラクプログラムを書く事が出来ます。



なお、Windowsだとメニューも日本語化出来るので、余力がある人は試してみれば良いでしょう。

今からPythonを学びたい、とかJavaScriptを学びたい、って言う人、あるいはやっぱりC言語に挑戦したい、って人もまずはプログラミング入門 - Ruby を使って -に従って2週間程度Rubyに付き合ってみる事をオススメします。
何度も強調しますが、手早くチュートリアルを終えてまずは「プログラミング」の全概要を知る。Go-back-and-forthが重要です。「石に齧りついて、本を開いて、詳細まで知る為に一章一章丁寧に学習していく」なんてやらんで良い。結果2週間程度Rubyに付き合った方が効率良くその後の「詳細を知る」勉強は捗るでしょう。
そしてチュートリアル以降、仮に別言語に移動するにせよ、

「あ、俺は今二個目のプログラミング言語やってんだ。俺って結構凄くない?」

と自信を持つことが出来るでしょう。これはかなり大きな自信となる。
もう一回書きますが、現在の世の中、プログラミング言語なんて所詮(殆どのケースでは)タダです。金銭リスクは一切生じないのです。だから早い段階で2つの言語をやる事になっても、得する事はあれ、損する事は全くないでしょう。

※: 「いわゆるスクリプト言語」であるが、実はスクリプト言語の厳密な定義は存在しない。実際は単なるプログラミング言語であって、その意味で言うとC言語と大差はない。
スクリプト言語と言う呼び方は、実はマーケティングに由来する。
つまり、「プログラミングは難しいけどスクリプティング(単なる記述)は簡単だ」と言う印象が英語にはある、と言う事だ。
故に新規ユーザーを引きつける為に「スクリプト言語」と言う言い方が生まれた。
似たような表現でLL系言語、等とも呼ばれる。LLはLightweight Languageの略で、日本語訳すれば「軽量言語」となる。何が軽量なのか。単に「真剣な(C言語のような)プログラミング言語」に比べると軽いんだよ、だから簡単に書けるんだよ、と言う印象操作の為のレトリックでしかない。
実際は、Python/Rubyのような、C言語より遥かに高機能な言語は、動作速度から言うと実は「重い」。軽い重いの話をするならメチャクチャ重いのだ。だからこの言い回しは事実に反してるし、これも実は意味がない。
いずれにせよ、プログラミング言語の普及には「宣伝」が付きまとう為、イメージ戦略上、色々な言い回しを生み出す事がある、と言う話である。
なお、じゃあ「重い」軽量言語はダメで「軽い」C言語は良いのか、と言うとそんな事はない。Cが軽いのは機能が無く、安全じゃないからだ。従って、Cで安全で多機能なソフトウェアを書こうとすると、結果、出来上がるモノはやっぱり重くなってしまう。
言い換えると、「重い」軽量言語は言語そのものが安全性と多機能性で最初っから重くなってる分、Cで組み立てなければならないいろんな部分を初めから背負っている、と言う意味になる。
要するに安全性/多機能性と「速さ」はトレードオフの関係にあり、結果出来上がるモノはほぼ同じなのだ。これを一部ではグリーンスパンの第10法則と呼んだりする。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事