Skip to content

VisualStudioは開発環境として完璧だけど、そこが良くないという話。

僕は、とあるアプリの試作品をpythonのIDLE(pythonに付属する簡易的な開発環境)を使って作った。

それは、何かアイデアが頭に浮かんだら素早く起動し、一行ほどのメモを入力して閉じる。メモはOneDriveに保存したデータベースに記録される。という至って簡単なもので、自分で使うためだけに作ったものだ。

いつもは完成して実際に使ってみると、さほど便利ではなかったり、以前使っていたツールに戻ってしまうという落ちなのだが、今回はそうならなかった。

僕はこのアプリをもう少しちゃんとした形に作り直して、世に送り出したいと思った。

「The」と付けたくなるほど

そこでVisualStudioの話が出てくるんだが、Windowsで動くGUIアプリを開発するとすれば、もうこれ一択だろう。以前にもアプリをC#とVisualStudioで作ったことがあるので、全く初心者というわけもなかった。

そこでMicrosoftの公式ウェブから、VisualStudio2019年版をダウンロードし、インストールすることになった。

それは、洗練されたデザイン。Microsoftによる、Windowsエンジニアのための、Windowsアプリケーション統合開発環境。まさに「Windows感」が隅々まで行き届いた「The Visual Studio」だった。

LinuxOSをがっつり触っている玄人気質のエンジニアの中には、Windowsを嫌う人もいるが、僕は「Windows」というブランドは、基本的には好きな方だ。

VisualStudioを使い始めてから、数日間が経つまでは・・・

最強の開発環境

VisualStudioは、コーディングをするプログラマーの負担を軽減するための細かなサポート機能が備わっている。何か入力しかけると、候補になりそうな単語をリストアップするコード補完機能もそうだが、コード規約の監視まで行う。例えば、僕がメソッドの名前に

private void set_textsize()

と書くと、

private void Set_TextSize()

と変更するように指示が表示される。

それ以外にも、何か間違ったコーディングを行うと、すかさずエラーマーカーを出し、修正案をリストアップしてくれる。これは、ビギナープログラマーにはありがたい機能だ。

そして、極めつけは、GUIの構築をサポートするデザイナーだ。それは、もはやアートだ。パレットから色を取って、キャンバスに筆を下す画家のように、ツールボックスから選んだボタンやラベルを配置していく。もちろん、配置されたコントロールが綺麗に並ぶようにアシスト機能がついている。

pythonにもGUIを構築する機能はあるが、ボタンの位置を微調整するのに、いちいちコードの中の数字を書き換え、再実行してはその状況を確認するという何ともまどろっこしいことをしているのだ。

もし、僕がVisualStudioだけを使ってきたプログラマーなら、多分、PythonのIDLEが、全くおもちゃのように見えるだろう。

まだ、使い込んでいるわけではないが、もっとプログラマーのニーズに答えた素晴らしい数々の機能がこの中にあるはずだ。

VisuaStudio本体の話とは離れるが、ネット上では、VisalStudio関連の情報、C#に関する情報は、やはり、pythonよりも多いと感じる。

開発中に何かにぶつかると、ネットで少し調べれば大抵の解決法が見つかる。

冒頭では、pythonを使って試作品を作ったと言ったが、制作期間はほぼ一日ぐらいだ。一方、VisualStudioでは、GUIの構築、同一の機能を実装するのに数時間といったところだ。正直、こんな感じだった。

「え、これでいいの? これで終わり?」

明らかに、VisualStudioはGUIアプリケーションを作るなら最強の開発環境と言える。

罠にハマる

問題が発生したのは、僕がソリューション名を変更したことから始まった。

「ソリューション」とは、複数のプロジェクトをまとめて入れるコンテナのようなものだ。何かを開発するとき、最初にプロジェクト名と同時にソリューション名を決める。

途中、僕は、何だかその名前が長ったらしく感じたので、短く書き換えたのだ。

すると、VisualStudioを再起動した時に次のようなエラーが表示された。

サイドパネルにも、プロジェクトを読み込み失敗という表示が・・

どうやら、変更前のソリューション名がどこかに残っているらしい。それがパスに使われ、結果、読み込み失敗となっているようだ。多分、設定ファイルのどれかに残存しているのだろう。僕は、それを探すはめになった。

” C:¥ ” から順にたどって、プロジェクトのファイル一式が格納されているフォルダーを見つけた。そこには、VisualStudioがプロジェクトのために自動生成したファイルやらフォルダが階層を組んで配置されており、ソリューション名が書いてあるファイルがどれなのかが、全く分らなかった。

とりあえず、プロジェクトファイルの拡張子「.csproj」が付いたファイルをメモ帳で開くと、以前のソーリューション名が二か所ほど見つかり、それを新しく書き換えた。そして、VisualSutdioを再起動したが変化なし。まだ、どこかに残っているようだ。

それで、インターネットで調べていると、とあるブログで次のような記述を見つけた。

「隠しフォルダ “.vs ” 内にある ” .suo ” を削除すれば戻る」

僕はその情報を信じて、.suoファイルを削除し、VisauStudioを再起動した。

「嘘じゃんかよー!」

全く、ネット情報など当てにならないものだ。

巨大なオートメーションシステム

結局、.csprojファイルを直接起動するという方法で正常に戻った。

手順は以下だ。

プロジェクトフォルダ内で拡張子.csprojを持つファイルを探す。

見つかったら左クリックでショートカットメニューを表示 > プログラムから開く > VisualStudio2019 を選択。

一度、正常に戻れば、改めてプロジェクト保存で、次回からは普通にVisualStudioからプロジェクトを開くことが出来る。

注意点は、VisualStudioを起動してから、プロジェクトを選択しても読み込みは失敗をする。プロジェクトファイルからVisualStudioを起動だ。

さて、この問題を解決するのに、二時間を費やしてしまった。

VisualStudioは、全てのWindowsエンジニアのニーズに答えるために構築された巨大なオートメーション工場のようなものだ。

そこに「人」が入り込む余地はなく、全てが自動化され、歯車の一つ一つが精密に噛み合って動いている。そこには、Microsoftが長い歳月をかけて培った設計思想が体現されている。

ただ、全てが完璧に連動しているロボットシステムに、一匹の蛾が迷い込んだとしたら、そのシステムは途端に異常を検知しシャットダウンしてしまう。

つまり、全てをオートメーション化するという設計思想が、たった一つの小さな歪から大きな影響を及ぼす弱点となる。

多分、VisualStudioのベテランユーザーなら今回のようなミスはしないだろう。単純に僕がバカだったわけだが、VisualStudioという高機能なブラックボックスの中でどんな処理が行われているのか知らないビギナーにとっては、便利である反面、Microsoftが想定しないうっかりミスをした時に、たちまち「融通のきかない無反応な機械」になってしまう。

その利便性が使いにくいという・・

実は、これ以外にも僕はミスを犯していた。

VisalStudioは、GUIアプリケーションを作る場合、ソースコードを書く.csファイルと、画面のデザインを担当する.xmalファイルに分かれている。この「WPF」というフレームワークは、プログラマーとデザイナーが仕事を分担でき、なおかつ管理しやすいという側面を持つ。

ミスというのは、うっかり、.scファイルを削除してしまい、.xmalファイルだけが残ってしまったのだ。

それで、せっかくコントロールを綺麗に並べた.xmalファイルが、片割れを失ったまま、無意味なファイルになってしまった。僕はやもえず、それを削除し、一からGUIを作り直すことになった。

二つに分れて管理しやすいという利点は、pythonに慣れ親しんできた僕にとっては、とっつきにくい利便性なのだ。

pythonならばファイル一つに全ての処理を書くことが出来る。開発するものが、ちょっとした便利ツールプログラムならば、それで十分だし、ファイルをクラウドサービスにアップロードし、皆に配布するのも簡単だ。インストールの必要もなく、プログラムを起動したければ、ファイルをダブルクリックすればいい。

一方、VisualStudioは、アプリをリリースするための綿密な設定が数多くあって、あらゆるカスタムが可能だ。ただ、簡単なプログラムをちょっと公開したいだけなのだが・・要するにVisualStudioは、僕にとって完璧過ぎるし、高級過ぎるのだ。

例えるなら、VisualStudioによる開発は、ジェット機を操作するようなものだ。操作を誤れば墜落する。一方、python(IDLE)による開発は自転車だ。パンクをしたら、まず、何をすればいいのかすぐに分かる。

とは言え、しばらく使っていくうちに、また違った印象を持つかもしれない。

今のところは。

 

この記事をシェア

Comments are closed, but trackbacks and pingbacks are open.