1.「VB歴18年」の私「野田工房」の経歴
・今回、はじめてQiitaで記事を書く
・私の生き様が「VBの素晴らしさを語る前提」となる
ということで、「私の経歴」をざっくり書きます。
◯私は、「才能」がまったくない「ダメ人間」だった!
下記の5つのエピソードから、私がどれだけ才能が無いかは、分かると思います。
(1)「8年間習ったピアノ」はまったく上達せず
(2)「6年間習った英語」は、「一番の苦手科目」に
(3)「美術」は、筆記100点でも、「実技」(絵)がひどすぎて「低評価」
(4)「2年間やった吹奏楽」も上達せず、音楽経験皆無の後輩に抜かれる始末
(5)「相手が2人以上」になると、まったく話せなくなるほどのコミュ障
本当にリアルでは、「ダメ人間」です。
◯そんな中、唯一成果が出たのが「パソコン」
当時は、「超低スペック」で、「扱えるデータ量」や「処理速度」に明確な制限があり、
「ファイル名」は、半角8文字(全角4文字)しかつけられず、
「同時に出せる音数」にも限りがあり、
「パソコン通信」(今で言う、インターネットみたいなもの)は、「超低速」「高額」で、
いかにして、シンプル化&省略して、ハードウェアを有効活用するかが、なにより重要でした。
「ハードウェアの性能」が急速に上がり、「ビッグデータ」も扱えるようになり、
「ネットに常時接続」でき、検索すれば「大体どんな情報でも手に入り」、
「ネットで、家電も気軽に買える」・・・。
そんな、夢のような時代が来るとは、思いもつきませんでした。
今考えると、「超オンボロ・ポンコツのパソコン」ですが、
当時の私の瞳には、
・ゲーム
・ワープロ
・表計算
・データベース
・イラスト
・作曲(DTM)
・プログラミング
・パソコン通信(今で言う、インターネットみたいなもの)
など、「なんでもできる魔法の箱」に見え、夢中になりました。
才能がないため、「26年間」という圧倒的な「時間」「努力」「お金」をつぎ込みました。
高専~大学院では、情報工学を「9年間」専攻しました。
趣味でも、精力的に活動し、「実績」をたくさん作りました。
<パソコン関連の実績(趣味)>
◯プログラミング歴18年(中1~)
「アイデアをすぐ形にできて、自動化できるのがプログラミングの魅力!」
・ツール作成数:300以上
・メディア掲載:雑誌50回、窓の杜5回、Vector2回、読売新聞1回
・高専プロコン:「文部科学大臣賞」受賞
◯音楽歴20年(幼~小6、大3~)
「楽器が弾けなくても、世界中のあらゆる楽器を演奏できる♪」
・アニソンカラオケ:200曲制作
・YouTube:1,500万再生
・nanaフォロワー:7万人(※1位)
・Twitterフォロワー:14,000人
<代表作>
1位「God knows...」(涼宮ハルヒ)
↑左ギターの「★超絶テク★」に注目!
2位「コネクト」(Claris)
**
↑サビの「★圧倒的盛り上がり★」は必見♪
◯デザイン歴20年(中2~)
「Adobe系ソフトは、大体使える!」
・「Illustrator」「Photoshop」:20年
◯HP制作歴23年(小4~)
「自作ツールや有益な情報提供など、表現の場として活用!」
・「メモ帳」のHTMLのタグ打ちからはじめ、
「ホームページビルダー」や「GoLive」を経由し、
現在は、「DreamWeaver」「WordPress」を使用
野田工房の活動詳細は、ホームページやTwitterをご覧ください。
◯苦手なことは「プログラミング」の技術力でカバー
パソコンの中でも、特に「プログラミング」には助けられました。
・PC作業の徹底的な自動化、効率化(今流行の「RPA」のような)
・大量のデータ分析(アクセスログ、スクレイピングデータの分析)
などで、特に役立っています。
プログラミングをするメリットは、
・OSの仕組み(WindowsAPI、プロセス・メモリ・ファイル管理等)
・様々なアルゴリズム(ゲームのループ・再描画・当たり判定、ソート等)
・その業界の仕組み(業務の流れ、人工知能・AIの仕組み、知識獲得等)
・曖昧なデータの数値化(ビッグデータ分析、可視化、テキストマイニング等)
など、プログラミングの対象について、自然と知識が身につきます。自分を表現し、社会貢献することもでき、楽しくて仕方がありません!
そして、一度プログラミングしてしまえば、「繰り返し作業」「情報収集」「データ分析」等を自動化できるため、「寝ている間」も「外出している間」も、PCが自分の代わりに働いてくれます。
◯私は「Windowsクライアントのプログラミング」がメイン
以上から分かるように、私は「Windowsクライアントでのプログラミング」がメインです。
もちろん、サイト運営上、WordPressのテーマやプラグインの「PHP」を改造したり、「JavaScript」でホームページのHTMLを形態素解析して「見出し構造」や「単語出現頻度」を分析したり(※本ページ末尾参照)することもありますが、正直、あまりWeb系は得意ではありません。
また、UNIX系の「シェル」もあまり馴染みがありません。
(単純なコマンドを、パイプでつないで処理するメリットは理解しています)
2.VBの素晴らしさを「8つ」挙げてみる
「VBがどれだけ素晴らしいか」について、理由を「8つ」紹介します。
【理由1】「Windows OS標準機能」で使える
会社のパソコン等に自由に開発環境を入れられない中、「VBS」という言語を使えば、WindowsのOS標準機能ですぐにプログラミングできます。
【理由2】「EXCEL」の操作をVBAで自動化できる
同じく、会社のパソコン等に自由に開発環境を入れられない中、「EXCEL」は当たり前のように入っています。
「VBA(EXCELマクロ)」を使えば、EXCELのあらゆる作業を自動化できます。もちろん、EXCEL以外の操作の自動化(「IE」などが代表例)も可能です。操作を記録すると、VBAのソースが自動生成されます。デバッグも、専用エディタで自由自在です。1行ごとに実行でき、変数値も随時確認できます。
データは、EXCEL上に表示されるため、初心者にとって難しい「データ構造」もあまり意識する必要がありません。一目でデータを確認でき、問題点も分かります。
もちろん、EXCEL VBAの処理を高速化するには、「セル内容(Range)」⇔「配列」間でコピーしたり、画面描画を止めたりと様々なテクニックがあります。
【理由3】無料で、コンソールアプリや通常アプリを作れる
「VB.NET」の開発環境を用意すれば、Windowsのクライアントアプリはだいたい作れます。初心者の方でも、Expressエディションなら、無料でダウンロードして気軽に使い始められます。
【理由4】ネット上に情報が豊富で、困らない
ネットで検索すれば、「VB.NET」や「VBA」の情報が多く出てくるため、困ることがありません。旧VB時代からの資産やノウハウも多く、経験者も多いです。
【理由5】GUIのデザインが直感的で楽
基本的に、「ラベル」「ボタン」「テキストボックス」を貼り付けて、並べるだけでデザインでき、とても直感的です。
コードで画面デザインする言語もたくさんありますが、正直、直感的でないと感じます。ただ、HTML+CSS+JavaScriptは、ホームページ制作に必須です。「Google Chromeの開発者ツール」や「DreamWeaver」の機能を使っていじります。でも、本来そんな面倒なことをしたくありません。人間の生きていられる時間は、「有限」なのです。
【理由6】「BASIC」(基本)言語なので、簡単で生産的
プログラミング言語の中でも、初心者でも比較的簡単に使える言語です。
「C言語」のような、文字列を配列で扱って、終端文字まで意識しないといけない機械語寄りの言語と比べると、かなり優しいです。簡単な「スクリプト言語」は、たくさんありますが、なかなか、実践的かつ、幅広い用途で使える言語はありません。
【理由7】古い言語ですが、新技術も取り入れられている
VB.NETでは、「.NET Framework」の機能を使えるため、最新の便利なクラスを使えます。「VB.NET」ができれば、わざわざ「C#」に移行する必要性は感じられません。「VB.NET」と「C#」のコードは、ネット上でも一緒に載っています。
【理由8】1言語でクライアントアプリを大体網羅できる
・VB.NET
・VBA(EXCEL、Outlook、Wordなど)
・VBS
など、「VB」で「Windowsのクライアントアプリ」の大半はカバーできます。こんな万能な言語は、なかなかありません。
あまり知られていませんが、Outlookの「VBA」が使えると、メールの「件名」や「本文」で処理を分岐させて、「返信文を自動生成&自動返信」できたり、「メールを受信した瞬間、重要なメールのみをすぐ表示」できたりできます。Becky→Outlookに移行し、VBAで処理を自動化してからは、メールが届く度に確認する必要がなくなりました。
3.VBで困るあるあるケース(技術力のないプログラマへの「不満」と「嘆き」)
もちろん、「デメリット」も存在します。特に、簡単な言語であるがゆえに、技術力がないプログラマが多いのが困ります。
「VBプログラマ」がダメとよく言われるのは、「ダメVBプログラマ」を育成している、「ネット上のサイト」が1つの原因だと思います。
【ケース1】「グローバル変数」を使いまくる
'これはイメージです。
'信じられないと思いますが、実際に、こんなひどいソースがあります。
Public NAMAE As String
Public INPUT1(100) As String
Public INPUT2(100) As String
Public INPUT3(100) As String
Public INPUT4(100) As String
Public INPUT5(100) As String
Public INPUT6(100) As String
Public SAGYO1(100) As String
Public SAGYO2(100) As String
Public SAGYO3(100) As String
Public SAGYO4(100) As String
Public SAGYO5(100) As String
Public SAGYO6(100) As String
Public OUTPUT1(100) As String
Public OUTPUT2(100) As String
Public OUTPUT3(100) As String
Public OUTPUT4(100) As String
Public OUTPUT5(100) As String
Public OUTPUT6(100) As String
'・・・(中略)・・・
Public FILE_COUNTER As Integer
上記のソースは、あまりにひどすぎますが、「グローバル変数」が多すぎて、どこで使われているか分からない状態です。
あと、整数を扱う時に「Integer」を使う人が多いですが、「Integer」の範囲は意外と狭いです。「Long」を使いましょう。
【ケース2】無駄に「大量の配列」を使う
'これはイメージです。
'信じられないと思いますが、実際に、こんなひどいソースがあります。
Dim INPUT1_ID(100) As String
Dim INPUT1_NAMAE(100) As String
Dim INPUT1_ZYUSYO(100) As String
Dim INPUT1_SEIBETSU(100) As String
Dim INPUT1_YUBIN(100) As String
Dim INPUT1_NENREI(100) As String
「構造体」や「クラス」を使えばいいのに・・・という例です。上記のように、変数名を、MS-DOS時代の「N88BASIC」や「COBOL」風に大文字で書いたり、日本語で書いたりする人もいますが、ダメでしょう・・・。
【ケース3】ネットからそのままコピー
VB関連で検索すると、「Office TANAKA」さんのページが高い確率でヒットします。EXCELにまつわることに精通しておられ、間違いなくEXCELのプロです。腕前は確かで、とても面白く、尊敬しています。Schooでも、「Office TANAKA」さんの授業は、毎月楽しみに見ています。
「Office TANAKA」さんのテキストファイルをVBで読み込むソース例
http://officetanaka.net/excel/vba/file/file08b.htm
Sub Sample2()
Dim buf As String, n As Long
Open "C:\Sample\Data.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
n = n + 1
Cells(n, 1) = buf
Loop
Close #1
End Sub
しかし、「Office TANAKA」さんのホームページで公開されているコードは、とても同一人物とは思えません。EXCELのプロを堂々と名乗り、Microsoftからも公認され、EXCELの講座や企業コンサルもしている人物が書くコードでは、絶対あり得ません。全ページに渡り、上記のような感じです。
サンプルとして適当に書いているのか、外注さんに書いてもらっているのかは分かりません。でも、そのままコピーして使う読者のことをまったく考えておらず、「ダメVBプログラマを増やす原因の1つ」になっているのは明らかです。
これは、1人のVBプログラマとしての、「痛烈な嘆き」です。
<上記VBソースの、何がまずいのか?>
【問題点1】関数名を見ても、「何」を「どうする」関数か分からない!
私だったら、次のように書きます。旧VB風に、「TextFile_Load_SJIS()」等でもOKです。
'-------------------------------------------------------
'関数の概要:テキストファイルからShiftJISコードで文字列を読み込む
'-------------------------------------------------------
Public Sub loadTextFile_SJIS()
'・・・(中略)・・・
End Sub
また、私だったら、読者のことを考えて、実践ですぐ使えるように、次のようなの例も載せます。もちろん、引数の「値渡し」と「参照渡し」も意識する必要があります。
'-------------------------------------------------------
'関数の概要:テキストファイルからShiftJISコードで文字列を読み込み、返す
'引数 :strFilePath 読み込むテキストファイルのパス
'返り値 :ShiftJISコードで読み込んだテキストファイルの文字列
'-------------------------------------------------------
Public Function loadTextFile_SJIS(ByVal strFilePath As String) As String
'・・・(中略)・・・
End Function
【問題点2】ファイルポインタに「#1」を使うのはまずい!
複数ファイルを扱う場合は、「#2」、「#3」と増やしていくのでしょうか?
私だったら、次のように書きます。
lngFilePointer = FreeFile 'ファイルポインタの取得
【問題点3】変数名を見ても、「何」の変数で「何」の型か分からない!
私だったら、次のように書きます。旧VB風に、「InputRowStr」等でもOKです。
Dim lngFilePointer As Long 'ファイルポインタ
Dim lngLineCount As Long '現在読み込んでいる行数
Dim strInputRow As String '現在読み込んでいる行の文字列
これ以外にも、
・安易に「Variant」(何でも入るObject型みたいなもの)を使っていたり、
・「tmp」や「buf」など、典型的なダメ変数名を使っていたり、
・変数の初期化がされていなかったり、
・オブジェクトの開放(=Nothing)がされていなかったり、
ツッコミどころ満載で、頭を抱えます・・・|||(-_-;)||||||
【ケース4】必要十分なコメントがない
人によって書き方の癖が激しく、他人のソースはなかなか理解できません。コーディング規約を守ってほしいのはもちろん、最低限のコメントはつけて欲しいです!
上記の「Office TANAKA」さんのソースもそうですが、関数直前や関数内でも必要十分なコメントが欲しいです。
全行コメントを書いていたり、意味のないコメントだったりするのは、もちろんNGです。
【ケース5】関数化(モジュール化)さえ、されていない
1つの関数内に、似たような処理がずらずら書かれており、冗長すぎる場合です。中には、定数化、変数化さえされていないものも・・・。おそらく自動記録したものをそのまま使っているのでしょう。メンテが大変・・・。
【ケース6】いろんな意味で、適当・・・
・配列のサイズが適当。
・変数が使い回されている。
・変数の初期化がされていない。
・画面デザインがひどすぎる。(ボタンのみ、UI/UXがなっていないほか)
・入力→処理→出力の流れが意識されていない。
・・・など、挙げたらきりがありません。
4.技術力があれば、Windowsクライアントではかなり万能言語
・「コーディング規約」を統一して書くこと
・「必要十分なコメント」をつけること
・「他人でも分かるコード」を書くこと
など注意が必要ですが、Windowsクライアントではかなり万能言語だと思います。
5.でも正直、最近「Python」が気になる・・・
今、趣味で、「スクレイピング」や「ビッグデータ分析」に力を入れている関係で、「Python」がとても魅力的に見えます。
・世界中で利用者が増えていて、「大人気のプログラミング言語」
・今後有望な「データ分析」や「機械学習」のモジュールが豊富らしい
・UNIX系コマンドと「パイプ」で組み合わせて使えそう
あと、
・「字下げ(TAB等)」で、ブロックを定義する
・「pipコマンド」で簡単に機能追加できる(どちらかと言うとシェル系?)
・URLからのクロール処理が「1行で書ける」
など、かなりの衝撃を受けました。
ただ、VBであらゆる作業を自動化している今、頑張ってPythonに切り替えるのは現実的ではない感じがしています。作りやすいものはPythonで作って、VBと連携させるのが良いかなーと構想中です。
6.今のところは、私的に「VB」を超える言語に出会っていない
・毎日、3台、24時間体制でやっている「スクレイピング」も
・ちょっと集計&データ分析したい時に使う「EXCELマクロ(VBA)」も
・作業効率化のための「ツール作成」も
VBで作ることが多いです。
しかし、私は、「VB」だけを使っているわけではありません。
「PHP」も「JavaScript」も「Python」も必要があればいじります。
「Java(JSP)」の実務経験もあります。DBをいじるために「SQL」も叩きます。
ビッグデータの可視化には、「Google DataStudio」などの外部ツールも使います。
フリーソフトもたくさん使っています。
既にあって実用的に使えるものは、1からわざわざ作らず、有効活用させてもらうのが堅実です。
ただ、「Windowsのクライアントアプリ」を作る上で、
・長年、使い慣れている
・簡単で、直感的にGUIをデザインできる
・適用範囲が広い
点について、私的には、今のところは、「VBを超える言語」に出会ったことはありません。壁はあるものの、「VB.NET」「VBA」「VBS」「VB6以前」間で、過去の資産を活かせるのも魅力的です。
7.「機械学習」や「データ分析」が得意な人と繋がりたい
現在、「スクレイピング」を常時しており、
自サイトの改善や、新サイトの構想のために、
・キーワード選定
・記事の構造分析
・単語出現頻度分析
等を行っており、成果も出ています。
今後は、
・Web上の文章分析(「要約」、「傾向分析」等)
・機械学習(「キーワード分類」等)
などにも力を入れていきたいです。
「機械学習」や「データ分析」に詳しい方がおられましたら、実用的でおすすめの
・プログラミング言語
・モジュール
・ツール
等を教えて頂けると幸いです。
ちなみに、上記に度々載せていたスクリーンショットは、
10年以上前(学生時代)に作ったツールの一部です。
おまけ(本ページのスクレイピング結果)
◯タイトル:「VB歴18年」の私がVBの素晴らしさを語る【C#もPHPもPythonもメインで使わない理由】 - Qiita
◯見出し:
■1.「VB歴18年」の私「野田工房」の経歴
■■◯私は、「才能」がまったくない「ダメ人間」だった
■■◯そんな中、唯一成果が出たのが「パソコン」
■■■<パソコン関連の実績(趣味)>■■◯苦手分野は「プログラミング」でカバー
■■◯私は「Windowsクライアントのプログラミング」がメイン■2.VBの素晴らしさを「8つ」挙げてみる
■■【理由1】「Windows OS標準機能」で使える
■■【理由2】「EXCEL」の操作を自動化できる
■■【理由3】コンソールアプリも通常アプリも作れる
■■【理由4】ネット上に情報が豊富で、困らない
■■【理由5】GUIのデザインがとても直感的で楽
■■【理由6】BASIC言語なので、記述が簡単
■■【理由7】古い言語だが、新しい技術も取り入れられている
■■【理由8】1言語でクライアントアプリをほぼ網羅できる■3.VBで困るあるあるケース(技術力のないプログラマへの不満)
■■【ケース1】「グローバル変数」を使いまくる
■■【ケース2】無駄に「大量の配列」を使う
■■【ケース3】ネットからそのままコピー
■■【ケース4】コメントがない
■■【ケース5】関数化されていない
■■【ケース6】いろんな意味で、適当・・・■4.技術力があれば、Windowsクライアントではかなり万能言語
■5.でも正直、最近「Python」が気になっている・・・
■6.今のところは、私的に「VB」を超える言語に出会っていない
■7.「機械学習」や「データ分析」が得意な人と繋がりたい
■単語出現頻度
VB/EXCEL/変数/Windows/クライアント/直感/正直/工房/野田/Python/スクレイピング/自動化/困る/万能/豊富/プログラマ/PHP/分かる/大量/機械学習/データ分析/クラス/取り入れ/配列/苦手/記述/挙げ/グローバル/自由/文字数:3901文字