忍者ブログ
気ままな一人暮らしの、ささやかな日常
美術鑑賞からプログラムのコードまで、思いつくままに思いついた事を書いています。
[1]  [2]  [3]  [4]  [5]  [6
イメージ
こんにちは、和美です。
仕事でJavaの勉強中、バリデーションチェックに遭遇したので調べたまとめです。
Javaの用語集も文字数が増えてきたのでそのうち更新します。

【 目次 】

  1. 初めに
  2. 空白禁止
  3. Eメールアドレス
  4. 年齢
  5. その他
  6. 最後に

1. 初めに

Javaのよく分かっていなくて調べた用語集から独立しました。
元はバリデーションチェックの中の「@Email」とは具体的にどんなチェックをしているんだろう? という程度の軽い疑問だったのですが ……。
さすがにEメールアドレスだけだと短かったので、バリデーションチェックの話をまとめています。

バリデーション:入力内容や記述内容が要件を満たしているか、妥当性を確認すること。…… ぼんやりと入力内容のチェックだと思い込んでいました。
英語の意味は( 作業結果などが規定の条件や仕様に適合しているかどうかの )検証、証明、妥当性確認だそう。英検一級以上の単語らしいです。
バリデーション:わわわIT用語辞典

以下、@で示されるのが自動で設定される入力内容チェックです。

2. 空白禁止

主キーでオートナンバーのIDは@NotNull、Name(名前)は@NotEmptyでした。
まずemptyの英語の意味は 「 中身のない、からの 」 です。
何がどう違うの?と思って調べてみました。
@NotNull/@NotEmpty/@NotBlankの違い:n-agetsumaの日記
この三種類は少し挙動が違うようですね。
主キー設定でオートナンバーのIDはnullにはならないのですが、疑問は解決していません。
全部つけておけば?と思ったのは内緒。
読み進めていくと、本の解説部分に 「 フォームが未入力の場合、Nullではなく空文字と判定される 」 と書いてあって解決しました ……。

3. Eメールアドレス

Eメールアドレスには、@Email。シンプルですね。ゆえに内容が欠片も分かりませんでした。
「@Email Spring Boot」で検索したところ、
5.5. 入力チェック:5.5.2.1.1. 基本的な単項目チェック:TERASOLUNA グローバルフレームワーク開発ガイドライン
上記ページの(3)にて
対象のフィールドがRFC2822準拠のE-mail形式であることを示すorg.hibernate.validator.constraints.Emailを付ける。
と載っていました。
なるほど、RFC2822とやらでEメール形式を設定しているのか、という事で
3.4.1. addr-spec 仕様:RFC 2822
基準がこちらにありました。

割と長いので該当箇所のみ引用します。

addr-spec = local-part "@" domain
local-part = dot-atom / quoted-string / obs-local-part
domain = dot-atom / domain-literal / obs-domain
domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
dcontent = dtext / quoted-pair
dtext = NO-WS-CTL / ; 空白・制御文字以外
%d33-90 / ; "["・"]"・"\"を除く、残りの
%d94-126 ; US-ASCII 文字



…… 上記で引用したアドレスの基準の問題点は下記リンク先が詳しいです。
一言でまとめるとmandw@+$%zakki.co.jpという「 見た目でおかしそうな 」メールアドレスが通ってしまいます。
Hibernate Validator の @Email を使ってはいけない?:Qiita

なお上記リンクにも解決策はありますが、読んでも理解できていません。
解決策だけなら正規表現のみのようなので以下の方が理解 …… できるかもできないかもしれません。
メールアドレスのフォーマットチェックのリンク集:Qiita
正規表現は@Pattern(regexp="(ここに正規表現を入力)")で設定できるようです。

似たような形式で@CreditCardNumberというクレジットカード形式かどうかを確認するが、有効なカードかを確認するものではないというアノテーションや、@EANでJANコードかを確認するアノテーションもありました。

4.年齢

年齢の入力項目は@Min(0)@Max(200)とありました。
年齢は毎年変わるので、生年月日を入力させて自動計算させるべきとどこかで聞いた記憶が蘇ります。
データベースの授業で年齢は扱わなかった気がするのでJavaの授業でしょうか。
0以上にしてあるのはマイナス値を入力させないため、ですが、最大値は200って大きすぎない?と思ったので調べました。
最高年齢って120歳程度だったような、肉体的には150歳前後が限界という科学的な話を聞いたような、という記憶があったためです。
Wikipediaによると世界最高齢はジャンヌ・カルマンという女性が1875年〜1997年で122歳164日だそう。
多めに見積もっても150ぐらいでいいと思いました ……。
( 適当に130まで落としてつけました )
参考サイト:長寿:Wikipedia

まとめて@Range( min = 0,max = 130 )でもいいそう。
エラーメッセージを編集する時は@Min( value = 0, message = "0以上" )なので、controllerと同じくvalueのみの時は「value =」の記述を省略している模様。

5. その他

この後の手順で電話番号の入力内容を数字とハイフンのみに限る、という自作チェックを設定していたのですが、やり方がさっぱり理解できていないので自作チェックの実装はできていません。
ネットの集合知でどこかでちゃんとしたデータが転がっていると信じています。

6. 最後に

自動でつけるのに任せるのではなくて、中身も確認してから実装しないといけませんね!と思いました。
@Emailなんて一番面倒そうですしね。

リンクは載せませんが、docomoが.kinoko@docomo.co.jpというドットで始まるメールアドレスの新規登録を禁止したというニュースを思い出しました。
本来設定できないメールアドレスのため、利用者によると迷惑メールが来なくて便利だったそうです。
( パソコンからのメールを全面拒否すに設定すると早いのでは ……?)
PR
こんにちは、和美です。
仕事で、Excel関数とSQLiteというデータベースシステムとJavaScriptが使えるソフトを使って開発をしています。
JavaScriptの入門講座を探していて見つけたページから始まる、プログラミング言語の話です。

【 目次 】

  1. 初めに
  2. 難解プログラミング言語
  3. チューリング完全とは
  4. 自分自身のソースプログラムを出力する
  5. IOCCC
  6. 最後に

1. 初めに

きっかけは、仕事で調べていて見つけた以下のJavascript入門講座です。
…… お気楽でもなければ入門でもありませんが ……。
最初の文章から察するに、他のプログラミング言語を学んだ経験がある人向けのようです。
参考リンク:お気楽 JavaScript プログラミング超入門:M.Hiroi's Home Page

こちらで、3で割り切れたらFizz、5で割り切れたらBuzz、両方で割り切れたらFizzBuzzと言う 『 FizzBuzz問題 』 を知りました。

以下はPHPという言語で1~50のFizzBuzzを実行するコードです。

for($a=1;$a<=50;$a++){
if($a%3==0 && $a%5==0){
echo "FizzBuzz、";
}
elseif($a%3==0){
echo "Fizz、";
}elseif($a%5==0){
echo "Buzz、";
}else
echo $a."、";
}
?>

2. 難解プログラミング言語

上述のページからリンクされている、『 FizzBuzz問題 』 のWikipediaのページを読み、そこからジョーク向けプログラミング言語であるHQ9+に、FizzBuzzを追加し拡張したHQ9F+を知りました。
参考リンク:HQ9+:Wikipedia
世の中には和美が知らない言語がまだまだ多くあるんだなぁ、と思っていたら、『 難解プログラミング言語 』 と呼ばれるジャンルに属するジョーク言語だそうです。
そもそも命令文が 『 Hello, world! 』など四~六種類しかないため、実用性は皆無ですが。
( バージョンによって命令文が追加されています )
命令文が足りない言語を 「 チューリング完全ではない 」 と表現するようです。

3. チューリング完全とは

「 チューリング完全ではない 」 と言われても、Wikipediaの説明では和美はさっぱり理解できず、以下のサイトを参考にしました。
参考リンク:チューリング完全性について詳しく教えてください。:Quora

内容を書き直すと、以下三つの手段が使えるものの事だそうです。
順次:
ある一つの手続きを実行し、それからもう一つの手続きを実行する。
分岐:
True / Falseの選択肢の結果に従って、2つの分岐先のどちらか片方を実行する。
反復:
True / Falseの選択肢がYesである限り、手続きを繰り返し実行する。
まずは一つ目の順次から。
例えば、1 + 2 + 3という普通の計算式の場合、最初の1 + 2を実行して計算結果の3と次の+ 3の計算を行う、というものです。
1 + 2 × 3は足し算より先に掛け算の2 × 3を先に計算するので順次ではありませんね。

次に二つ目の分岐。
True / Falseは真偽値とも呼ばれて、プログラミングによく出てくる条件分岐の初歩です。
簡単なところだと、Excel関数のifが分かりやすい例だと思います。
IF(1+2=3,"A","B")と書いたら、1+2が3(True:真:正しい)の場合はA、違う(False:偽)場合はBと表示されます。
この式の場合は確実にTrueなので、Aだけが表示されます。
二つの分岐先のどちらか片方を実行、は表示の部分ですね。
1+2が3かどうかという選択肢の結果で、電卓とは異なり、表示されるのは計算結果の3ではなくAという文字です。

三つ目の反復(True / Falseの選択肢がYesである限り、手続きを繰り返し実行する)
は …… Excel関数より普段の実生活が多いですね。
五時まで勉強をする時、繰り返し実行される内容は、勉強と時計を見ることです。
時計を見た時、五時か五時でないか。がTrue:真:正しい / False:偽:違う の選択肢です。
勉強の終了条件は五時なので、時計の時間 < 五時 が成り立つ(Yes)間は勉強を続ける、という感じです。

4. 自分自身のソースプログラムを出力する

上記Wikipediaに
「 自分自身のソースプログラムを出力する 」 という例題は多くのプログラミング言語にとって最も難しい課題の一つ
という一文があり、Javaの講習を思い出して納得しました。
「 同じコードを表示することでソースを出力しているように見せかける 」 という手法になるのでしょうか。
参考リンク:クワイン(プログラミング)Wikipedia
上記Wikipediaに挙がっている中にVBAがありましたが、
「 故意による可読性低下・冗長な装飾を含 」
むらしく、さっぱり読めませんでした……。正規表現に見えるんですが、これ。

参考リンク:Malebolgeマーレボルジェ:Wikipedia
難解プログラミング言語の中にあったMalebolgeマーレボルジェは、最も扱いにくく難解であるプログラミング言語となるべく設計されたそうで、面白そうだなぁと思います。
誰か人力でコードを書いてくれないでしょうか。

5. IOCCC

このサイトについて:IOCCC日本語ネタバレ解説
IOCCC(International Obfuscated C Code Contest:国際難読化Cコードコンテスト)という、故意に難解なC言語のプログラムを書き、その読みにくさと複雑さを競う奇祭があるそうです。
(リンク先は二〇一九年二十六回目まで解説済み、二〇二一年八月現在で二〇二〇年二十七回目まで発表済み)
Obfuscatedはobfuscateの過去分詞形で、暗くする、分かりにくくさせる、などの意味だそう。
( 当惑させる、が一番相応しい気がしました )
第21回IOCCC入賞作品「踊る人形」:cuspy diary
こちらの発想が面白かったです。

和美はC言語が全く読めないのですが、WikipediaによるとJavaScript版もあるようです。
国際難読javascriptコードコンテスト:Wikipedia
が、出典元が不明な上に、Wikipediaからリンクされた公式サイトが繋がらず。
応募期間が不明な第一回が審査中とのことで受賞者もまだおらず、他に情報が出てきません ……。
JavaかJavaScriptかPHP辺りで書かれていたら頑張って解読してみるのですが。
……ひまわり(寝言)

6. 最後に

心酔する「「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」の方が、コラムで「2つ目のプログラミング言語を勉強する機会が、ほぼ間違いなく訪れる」と書いていたのを思い出しました。
参照リンク:第四十九回:初心者が最初に学ぶプログラミング言語は何がオススメか?
プログラマーならいつかはC言語。(個人的な思い込みです)
崖
Konrad JanikによるPixabayからの画像
こんにちは、和美です。
ITパスポートの勉強中なので、分からない単語は積極的に調べています。
会社の人の打ち合わせで「 現状と同じ業務手段で、2025年の崖に落ちなければいいなと懸念しております 」 というコメントがついていて、「 2025年の崖 」とは?と疑問に感じたので調べてみました。

【 目次 】

  1. きっかけ
  2. 2025年の崖とDX
  3. お役所仕事
  4. 余談

1.きっかけ

抽象的な内容ですが、という但し書きつきで添付されていたのが下記サイトです。
参考リンク:IT部門が旗振り役として進めるデジタル起点の企業変革:日経クロステック Special
「 2025年の崖 」の言葉自体が出てきませんが、COVID-19によって業務手段を大幅に変えた実例が挙げられています。

2. 2025年の崖とDX

上記内容よりもう少し具体的な内容が書かれたのが以下のサイトです。
参考リンク:調査で分かった「2025年の崖」の実態、日本企業の転落は既に内部で発生中
上記サイトでも 「 2025年の崖 」 の説明がなかったので、更に調べました。

DXとは「 デジタルによる変革 」という意味で、企業の成長や競争力を高めるために、進化したデジタル技術を活用して新たなビジネスを創出したり、生活を向上させたりする取り組みのことを指します。
ビジネスモデルや生活モデルにイノベーションを生み出すことで、企業や人々の生活、社会が豊かになっていくと考えられています。
日本企業がこうしたDXを推進していかなければクラウドベースのサービス開発・提供において戦えず、業務効率が悪化、競争力が低下した結果、デジタルによる変革を進めた国や企業に対抗できなくなります。
この巨大な経済損失リスクが、「2025年の崖」
参考リンク:「2025年の崖」とは?概要をわかりやすく要約!今、ビジネスパーソンに求められること:はたラボ ~パソナキャリアの働くコト研究所~
との事でした。
ここで、前提知識である 「 DX 」 自体の意味を理解していない事が判明してしまいましたが、日本企業にもお役所にも無理だと思いました。
以前常駐させられていた東証一部に上場している有名企業では、クラウドサービスは国内サーバーのみ ( サーバーの住所必須 )、SNS経由の注文受付は禁止、加盟店のHPは自社サーバーに限る、など、明らかに時代に合わない規約が多かったのを思い出します。
( 一応業界最大手ですが、株価は安いです )
個人情報の流出を懸念するより、時代についていく事の方が大事だと思っています。

3. お役所仕事

営利を追求するはずの企業ですらその惨状ですが、お役所はクラウドサービスがAmazon傘下のAWSでしたね。
参考リンク:アマゾンに政府基盤システムを発注して大丈夫?情報保護、障害、コスト…:DIAMOND online

2018年に農林水産省が「 一太郎廃止で働き方改革 」 というニュースがありましたが、Excel(= Excel方眼紙、神Excel )禁止の方がよほど効果あると思います。
「それって働き方改革?」ツッコミどころ満載、農水省「一太郎」廃止報道に失笑:産経ニュース
…… 一太郎は日本企業( ジャストシステム )でWordは米国Microsoftなので、同様の機能なら日本企業製品を使うべきだと思います。

役場関係の書類は項目の位置がmm単位で厳格に決められているため、データの二次加工ができないExcel方眼紙型のデータが多いそうです。
…… 以前和美が勤めていた職場も、発注書がExcelでできていて、紙としても見辛かったのを思い出しました。
半分以上の項目が既に使われていなかったはずです。
シート一枚だけなので、別シートに内容を入力して全てvlookup関数で呼び出して表示していました。

webの個人情報の入力でも、郵便番号や電話番号が一桁ずつ分割された謎の入力フォームが時々ありますね。
京都市にある美術館では郵便番号からの住所自動入力がなく、かなり面倒だった記憶が蘇ります。
さすが京都。( 大半の公立美術館の態度が悪いです )

4. 余談

参考リンク:「2025年の崖」とは何か?レポートを要約すると? 経産省の推奨施策まとめ:ビジネス+IT
「 2025年の崖 」超えるためのコストとはの項目を読んでいました。
二十五年稼働 + 刷新に掛かった五年 = 三十年程でシステムの大規模刷新が必要なんですね。
一般的に早いのか遅いのか分かりませんが、もっと短くなっていきそうな気がします。
最近、みずほ銀行のシステム刷新が大失敗したのでどうなることやら、とワクワクしながら眺めています。
大手三行のうち唯一東京五輪のロゴマークを掲示していて、唯一の赤字です。

こんにちは、和美です。
静岡県は浜松市に一年近く住んで常駐していた仕事先の話です。

【 目次 】

  1. 初めに
  2. 故人の個人情報
  3. 閑話休題:黒歴史
  4. 循環取引
  5. EMOTET
  6. 不正アクセス
  7. パスワード漏洩
  8. 確認テスト

1. 初めに

会社のコンプライアンス研修として、資料を自分で読んで確認テストを受ける教育がありました。
知らなかったことが多く出てきたので、調べたこともまとめて公開です。
…… 社外に出していい内容しか書いていません。大丈夫。

2. 故人の個人情報

まずはコンプライアンス・マニュアルの行動指針から。
「個人情報の保護」の項目に

個人情報 = 生存する個人の情報で、氏名等により特定の個人を識別できるもの
と書かれていました。
和美が引っ掛かったのは「 生存する 」 の部分です。
生存していない、つまり死んだ人の個人情報は存在しないという事でしょうか。

という事で調べてみました。
参考リンク:3 亡くなった人の個人情報は個人情報保護法で保護されますか?:リバーシティ法律事務所
こちらによると、
個人情報保護法では、個人情報とは「生存する個人の情報」となっており、死者の個人情報は保護の対象ではありません。
行動指針にある通り、生者に被害が及ばない範囲で、死者に個人情報は存在しないようです。
事故・事件の被害者への報道はもはや名誉棄損に限りなく近いことをやっていると思っているのですが …… と思っていたら、「 存命遺族の『 敬愛追慕の情 』 を侵害された 」という扱いになるようです。
自分が事故や事件に巻き込まれて死んだ時は嫌いなTV局を訴えてほしいと思ったのですが、我が家では父親ぐらいしかやってくれそうにないのが辛いです。

…… やっぱりインターネットに本名を晒すと面倒なことになりますね!
古い話になりますが、2011年に起きたニュージーランドの地震の時、亡くなった方のmixiの個人ページがニュースで報道されていて不快でした。
( 写真にはさすがにモザイクが掛かっていたと記憶していますが )

上記参考リンクの中に貼られていたリンクが気になったので、引き続き故人の権利についての話です。
亡くなった人の「暗号日記」ネットの集合知で解読――そこに潜む「リスク」とは?:NO MORE 情報漏えい
ピーターラビットの作者、ビアトリクス・ポターが受けた被害 ( と呼んでいいと思う ) を思い出しました。
彼女が十六歳頃から二十年以上暗号で書き続けていた日記が死後に公開され、ファンによって解読され、解読された平文が出版されて挙句、生誕百五十周年記念イベントで展示されていたのです。
和美がその日記の本を見たのは周年記念の特別展ですが、嫌がらせ以外の何物でもないと未だに思います。

3. 閑話休題:黒歴史

題名から気になったのでこちらも読みました。
参考リンク:【このままじゃ死ねない!】わたしの黒歴史はどうなるの?故人のプライバシーについて弁護士に聞いてみた:NO MORE 情報漏えい
Facebookに自分の子どもの写真をアップするのは、自分の判断なので良いのですが
…… 子供の権利を親が侵害していいという話はどこにもありませんが。
写真から居住地や現在地や生活パターンが掴まれて、空き巣や誘拐事件に繋がる可能性を考えられないんでしょうか。
「 土曜日に(場所名)へ遊びに行ってきました 」 の一文だけで、土曜日が休み( 平日が仕事の可能性が高い ) で( 場所 )に遊びに行ける距離に住んでいると分かるんですよ。
それが鹿児島から北海道のような長距離なら、日帰りではない可能性が高いので文章も変わるでしょうし。

4. 循環取引

「 取引先との不正取引の禁止 」 という項目の最後にあった「 グループ内の循環取引にも要注意 」 の意味を調べました。
「複数の企業・当事者が示し合わせて計画し、商品の転売や業務委託などの相互発注を繰り返すことで、架空の売上高を計上する」ことで、最初の売主と最後の買主が同じ、輪のように取引が繋がっているのが特徴だそうです。
…… 不正会計にありそうですね。
輸送料を節約するためか、実際の循環取引では、商品は移動せず、伝票だけが流れていく架空取引が大半だそうです。
実例として「 企業の営業責任者が、売上ノルマ達成を目的として取引先業者と癒着し仮装している場合」と出てきて、「 仮装」の意味に、「 ある出来事があたかも実際にあったかのように見せかけること 」 という偽装のような意味があるのを初めて知りました。

5.EMOTETエモテット

ここからは情報セキュリティの話です。今年度は情報漏洩がテーマとの事。
情報漏洩リスクの事例の項目一件目に「ウィルスを含む添付ファイル付きのメール(Emotetエモテット)と書かれていたので調べました。
マルウェアの一種の名指しらしいです。
参考リンク:EMOTETエモテットとは?特徴から危険性、対策方法まで徹底解説
ただ、

メールの添付ファイルを開こうとした際、警告文が複数回ポップアップ表示されてもファイルを開いてしまい、ウィルスに感染してしまう!!
という辺りに少し人為的なミスを感じましたが ……。
2020年の感染事例では、九件とも全て社内パソコンでウイルスが添付されたメールを開封したことが原因だそう。
キャンドゥが被害に遭っていたのは全く知りませんでした。

上記参考リンク:EMOTETエモテットとは?特徴から危険性、対策方法まで徹底解説( 再掲 )の本文中にも知らない単語が出てきたので調べました。
マルウェア
「…… そこからかよ 」という辛辣な突っ込みの声が聞こえてきそうですが、ウイルスとの違いが分からなかったので改めて調べてみました。
データを無断で書き換えるコンピュータウイルス、内部情報を勝手に流すスパイウェア、データに鍵を掛けて代金を要求するランサムウェア、悪質な広告のアドウェアなど「 迷惑なやつ全部 」 の総称だそうです。
…… 悪質ではない広告の方が少ないという現実。
バンキングトロジャン
銀行を標的にした、無害なソフトを装ったトロイの木馬のような悪質なソフト。トロイの木馬自体はコンピュータウイルスではないそう。
ペイロード
EMOTETの開発グループは、EMOTETを利用する他のサイバー犯罪グループからの2次的なペイロードを運ぶことで料金を徴収しており、
と出てきます。
元は運輸業で運行に必要な物を除いた貨物や乗客などの積載量を指す英語ですが、IT用語としては、パケット通信においてパケットに含まれるヘッダやトレーラなどの付加的情報を除いた、データ本体のこと。
用語検索:ZDNet Japan
上述の引用文は、他の犯罪グループのデータ( ウイルスなどマルウェア )を運んで儲けているという事でしょうか。
フォレンジック調査
感染被害状況を調査する項目に
個人で調査を行うよりも安全面を担保する対応方法としてお勧めなのが、フォレンジック調査です。
フォレンジック( forensics )は法医学的な、科学捜査の、の意味で、感染したパソコン本体に別のツールを繋いで、専門家が安全に証拠を取り出すことだそう。
フォレンジックとは: FSS.jp
データ復元調査の場合、スマートフォンに何度もデータが書き込まれることで削除データが上書きされる恐れがあります。とあるのは、パソコンに比較してスマートフォンはゴミ箱の容量が少ないからでしょうか。
犯罪絡みでも個人情報の提出要求を突っ撥ねたAppleの方が安全に感じますね。
【全文訳】アップル、FBIの捜査協力要求を拒絶!クックCEOがメッセージを公開!:iPhone Mania
「フォレンジック調査 」 の言葉の定義は 「 犯罪の立証のための電磁的記録の解析技術及びその手続き 」 だそうですが、裁判上での証拠保全に限らず、今回のようなマルウェア感染調査や、不正アクセスによる顧客情報流出の事後調査など色々あるようです。
フォレンジック調査とは?費用や相場・おすすめ業者を徹底比較!:Cyber Security.com

6. 不正アクセス

不正アクセスの被害では、2021年に入ってからまた新しい情報が出てきた、カプコンの事例が取り上げられていました。…… 過去の求人応募者の情報だけは、さすがに庇いようのないカプコンの手落ちだと思いますが ……。
身代金を要求されているので、前章で調べたマルウェアの中のランサムウェアですね。
代金を支払っても要求通りデータが取り戻せるとは限らないのが、犯罪者との取引の難点です。
ふと、被害者への謝罪を500円の金券で済ませたベネッセグループの事件を思い出しました。
ベネッセ個人情報漏洩事件の全て|企業は加害者?それとも被害者?:Cyber Security.com

7. パスワード漏洩

クラウドサービスでは、定期的にアクセス可能なメンバーの棚卸と、ID・パスワードの設定変更を行ってください。
…… いつまでこんな無駄な事をさせるんでしょうね。
パスワードの定期変更は不要:総務省が歴史的な方向転換:トラスト・ログインブログ
総務省の公示は2018年ですよ。
個人毎にログインIDとパスワードを設定すればどこから漏れたか分かりやすいですし、パスワードを使い回す原因は 「 人にパスワードを記憶させるから 」 ですよ。
大手だと、Yahoo!はSMSによるワンタイムパスワード方式に変わりました。
…… パスワードを紙に書いていたことで助かった話も複数ありますし。
ヘリオス航空522便墜落事故:Wikipedia
こちらの調査の項目後半に出てくる男性客室乗務員は、他の乗務員が手帳に書いていたパスワードで操縦室を解錠したそうです。

8. 確認テスト

〇×、数字選択形式のExcel確認テストがあったので受けました。
問題が16問あり、一通り資料に目を通して解答した段階では90点でした。
個人情報の保護に関する問題と、上場企業としての責務を間違えていました ……。

こんにちは、和美です。

仕事で、Excel関数とSQLiteというデータベースシステムが使えるソフトを使って開発をしています。
SQLは不得意な上に覚えられなくて調べたメモ書きです。
去年2020年の三月頃に臨時上司から受けたAccessの講座で言われた、「 SQLからは逃げられない 」 という言葉を胸に頑張っています。

vs SQLiteの第二弾は複数テーブルの結合です。
使用したデータベースの環境はSQLite 3.24.0。

【 目次 】

  1. 実現したいこと
  2. 試したこと1
  3. 試したこと2
  4. 解決策
  5. 最後に

1. 実現したいこと

以下のようなA、B、Cのテーブルを結合する時の話です。

テーブルA:題名テーブル
通し番号(主キー)題名
0001あいうえお
0002かきくけこ
テーブルB:通し番号別記号テーブル
通し番号(主)No.(主)記号
00011AAA
00012BBB
00013CCC
00021BBB
00022DDD
テーブルC:名称テーブル
記号(主)名称
AAAいろは
BBBにほへ
CCCとちり
DDDぬるを
最終的に表示させたいテーブルのイメージはこちら。
テーブルAの通し番号をキーにして、行数はテーブルAと同じ二行のままテーブルBを横に並べて結合、テーブルCはテーブルBの記号をキーにして結合です。
…… 例では省略しましたが、テーブルBのNo.は実際には最大で十件ありました ……。
テーブルA+No.1のB+No.1のC+No.2のB+No.2のC+No.3のB+No.3のC
通し番号名前No.1記号No.1名称No.2記号No.2名称No.3記号No.3名称
0001あいうえおAAAいろはBBBにほへCCCとちり
0002かきくけこBBBにほへDDDぬるを
途中経過はいらないから最後のコードだけを見たいという方はこちら

2. 試したこと1

最初は別々の条件を元にテーブルを結合する方法が分からず、SQLが得意な職場の方に教えて頂きました。

テーブルA+B+C
通し番号名前No.記号名称
0001あいうえお1AAAいろは
0001あいうえお2BBBにほへ
0001あいうえお3CCCとちり
0002かきくけこ1BBBにほへ
0002かきくけこ2DDDぬるを
まずはここまで。
最終的に欲しいテーブルは次章まで持ち越しです。


SELECT
A.通し番号,
A.題名,
temp.No.,
temp.記号,
temp.名称
FROM
テーブルA AS A, -- 題名テーブル
( SELECT
B.通し番号,
B.No.,
C.名称,
FROM
テーブルB AS B, -- 通し番号別記号テーブル
テーブルC AS C -- 名称テーブル
WHERE
B.No.= C.No.
) AS temp
WHERE
temp.通し番号 = A.通し番号
;




改めて書き直すと「 なんでこんな事に悩んでいたのか 」 と思う内容でしたが、分からない時は分からないのです。

FROMの後にある括弧内は、「 副問い合わせ 」 や 「 サブクエリ 」 と呼ばれ、和美がもっとも苦手な領域です。
…… 苦手な割には今の開発で多用していますが ……。
副問い合わせの中でテーブルBとテーブルCを剥ぎ合わせて 『 temp 』 という名前の仮テーブルを作成し、その仮テーブルとテーブルAを剥ぎ合わせています。
しかも書き直す時に気づきましたが、副問い合わせ内のテーブルBとテーブルCの間にINNER JOINが省略されていますね。

教えてくださった職場の方からは 「 副問い合わせを使わなくても書けるかも 」 と言われましたが、修正は最終章に後述します。

3. 試したこと2

この章で一旦は完成です。
前章で三つのテーブルを接ぎ合せるのも苦労しましたが、縦持ちから横持ちに書き換える方法は、検索ワードから難航しました ……。

縦にデータが並んでいる正規化された状態を「縦持ち」、横にデータが並んでいる状態を「横持ち」と呼び、縦持ちから横持ちに書き換える事を『pivotピボット』、逆を『 unpivotアンピボット』と呼ぶそうです。

参考リンク1:[SQL]データの縦持ち、横持ちを入れ替える:Developers.IO
参考リンク2:SQL: CASE 句を使って縦持ちのデータを横持ちに変換する:CUBE SUGAR CONTAINER

上記参考リンク1ではrow_number() over(partition というコードが使われていますが、SQLite 3.24.0はrow_number、分析関数のoverとも非対応です。
( 三ヶ月後に発表されたSQLite 3.25.0より対応 )
色々やっていると、結局使いませんでした ……。

…… あまりにも読み辛いので修正します。
完成形のテーブルイメージを再掲しておきます。
テーブルA+No.1のB+No.1のC+No.2のB+No.2のC+No.3のB+No.3のC
通し番号名前No.1記号No.1名称No.2記号No.2名称No.3記号No.3名称
0001あいうえおAAAいろはBBBにほへCCCとちり
0002かきくけこBBBにほへDDDぬるを

SELECT
A.通し番号, -- 通し番号
A.題名, -- 題名
-- ここから下記号
SUM( CASE
WHEN temp.No. = 1
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.1記号,
MAX( CASE
WHEN temp.No. = 1
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.1名称,
SUM( CASE
WHEN temp.No. = 2
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.2記号,
MAX( CASE
WHEN temp.No. = 2
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.2名称,
SUM( CASE
WHEN temp.No. = 3
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.3記号,
MAX( CASE
WHEN temp.No. = 3
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.3名称
-- ここまで記号
-- ここからFROM
FROM
TableA AS A, -- テーブルA:題名テーブル
( SELECT
B.記号, -- 記号
B.No., -- No.
B.通し番号, -- 通し番号
C.名称 -- 名称
FROM
TableB AS B, -- テーブルB:通し番号別記号テーブル
TableC AS C -- テーブルC:名称テーブル
WHERE
B.記号 = C.記号
) AS temp
GROUP BY
A.通し番号
;




テーブルにない値の表示が心配でしたが、正しく空白になっていました。
途中の副問い合わせにMAXとSUMが入り混じっているのは、数値と文字列の違いです。
SUMでは名称の文字列が表示されず、何となく試したらMAXでは文字列が正しく表示されました。
最終行のGROUP BYがないと、テーブルBに登録されている通し番号分の行が表示されます。

4. 解決策

最終的に完成したコードは以下の通り。
FROMの中にあった副問い合わせは削除しました。

SELECT
A.通し番号, -- 通し番号
A.題名, -- 題名
-- ここから下記号
SUM( CASE
WHEN temp.No. = 1
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.1記号,
MAX( CASE
WHEN temp.No. = 1
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.1名称,
SUM( CASE
WHEN temp.No. = 2
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.2記号,
MAX( CASE
WHEN temp.No. = 2
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.2名称,
SUM( CASE
WHEN temp.No. = 3
AND temp.通し番号 = A.通し番号 THEN temp.記号
END ) AS No.3記号,
MAX( CASE
WHEN temp.No. = 3
AND temp.通し番号 = A.通し番号 THEN temp.名称
END ) AS No.3名称
-- ここまで記号
-- ここからFROM
FROM
TableA AS A, -- テーブルA
INNER JOIN
TableB AS B -- テーブルB
ON A.通し番号 = B.通し番号
INNER JOIN
TableC AS C -- テーブルC
ON B.通し番号 = C.B.通し番号
GROUP BY
A.通し番号
;




SQLを書く時は、とりあえず構文エラーが出ないコードをそのままに、別のところで「実験用」として新しくコードを書いて、正しく動く、構文エラーが出ない事を確認してから元のコードに上書きし、「実験用」は紛らわしいので削除します。
なので試行錯誤の途中経過は不明ですが …… 結局、FROMの中にあるtempの副問い合わせは不要になりました。

5. 最後に

vs SQLite関係の第二弾はテーブル結合、縦持ちと横持ちの変換でした。
この時は難航していましたが、この縦 → 横変換を何度も行う羽目になったので、少しは覚えられたかな …… と思います。
データベースがマイナーなので知らない方も多いかとは思いますが、お役に立ったら嬉しいです。
SQLiteイメージ画像
こんにちは、和美です。

仕事で、Excel関数とSQLiteというデータベースシステムが使えるソフトを使って開発をしています。
SQLは不得意な上に覚えられないので調べたメモ書きです。
以前臨時上司から言われた、「 SQLからは逃げられない 」 という言葉を胸に頑張っています。

【 目次 】

  1. 初めに
  2. 差集合
  3. 書く順番
  4. 日付の変換
  5. INNER JOINの書き方
  6. SQLの整形
  7. エラー表示
  8. 最後に

1. 初めに

記事の内容にはほとんど関係ありませんが、実行環境はSQLite 3.24.0です。
なんでそんなマイナーなデータベースを使っているのかって? 和美も文句言いたいです。
職場の方も「 なんでこんな変なデータベースを採用しているんだ? 」 と首を傾げていました。
「 ExcelとAccessのいい所取り 」 を名乗るなら、AccessのAccess Database Engine( 俗称:ACEデータベースエンジン )でいいと思います。

2. 差集合

二つのテーブルのうち、片方にはないレコードを抜き出すのを、数学理論用語で 「 差集合 」 と呼びます。
( 中学校辺りで習いましたね。AカップBとか )
普通はデータベースによってEXCEPTかMINUSを使うのですが、LEFT OUTER JOINでも同じ結果が出てくるのは意外でした。
参考リンク:SQLで、複数テーブルから他方に無い(存在しない)レコードを抽出する:ぱーくん plus idea
望み通りの結果は取得できたものの、理由はあまり理解できていません ……。
この辺も参考にしました。
SQL not exists サンプルコード 2テーブルの片方にしかないデータを抽出:ポテパンスタイル
SQLで重複データを扱うサンプルコード集 カウント、集計、最新のみ抽出、重複禁止:ポテパンスタイル

3. 書く順番

SQLを書く順番に毎回悩んでしまいます。
SELECTの後はFROMが最初、順番を並べ替えるORDER BYが最後かな、とは分かるのですが、GROUP BYやWHEREなど、FROMの後に付け足されていく色々なおまけの部分です。
毎回同じ句で絞り込むわけではなく、検索条件を後から書き足していくので、WHEREとGROUP BYはどちらが先に書くべき?と検索する羽目になります。
正しい順番は以下の通り。
  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
参考リンク:[SQL] SQL文の書き順 ~PostgreSQL Tutorialを使いながら解説~:Developers.IO
…… HAVINGなんて、使わないので用途すら忘れました。
確認したところ、GROUP BYでグループ化した後の検索条件のようですね。
参考リンク:SQL ServerのHAVING グループ化の条件を指定する:SQLServer初心者でもスッキリわかる

4.日付の変換

SQLiteでは、日付・時刻をシリアル値かユリウス通日か何かで保存し、使っているシステムの表示はスラッシュ繋ぎというソフト内の謎の不一致で泣きそうになりました。
三年前の今日以降で絞り込む時、丸三日間ほど掛かりました。
…… 結局解決策を見つけたのは、和美ではなく上司です。

strftime('%s' , date(cast(cast(year(date()) AS int)-3 as text) || '-'ont> || substr("0" || month(date() ), - 2, 2) || '-' || substr("0" || day(date() ), - 2, 2))) asont> year3




冒頭のstrftime('%s'で日付を秒に変換する強硬手段を使わない、もう少し綺麗な書き方はないものでしょうか。
…… 日付や時間を扱うことの多いシステムでSQLiteを利用するのはやめたほうがいいと思う。という主張は見かけましたが。
参考リンク:sqlite3でスラッシュ区切りの日付を扱う:あさはか備忘録
選べるなら和美は講習で使ったMySQLが良いですし、会社としては外部データベースに使う予定のORACLEの方が好みだと思います。

リンク先
OR検索とAND検索を同時に使う:LIG
WHEREで終了日が今日より前(終了済み)か終了日が空白(非使用)に絞り込む時に使いました。

日付と絞り込みの話はまた別の記事も書く予定です。
実はこの記事は、長いvs SQLiteシリーズの第一弾です。

5. INNER JOINの書き方

テーブル結合について、LEFT OUTER JOINになっているから検索結果が間違っていると指摘を受けました。
「 INNERは省略して、結合はWHEREに指定して... 」 と口頭で説明を受けたものの、理解できず。
改めて調べたところ、デフォルトがINNER JOINなので省略可能と知りました。
参考リンク:JOINするときにINNER or LEFT or RIGHT or FULLを省略するとどうなるだっけ?:babydaemons’ blog
ただ、参考リンク先の冒頭に「 他の人が書いたコードを修正する時に分からなくなって調べた 」 と書かれているので、省略するのは保守性に欠けると思います。

テーブル結合についての備忘録 その2:Qiita
INNER JOINとLEFT OUTER JOINの違いが覚えられません ……。

inner join と outer join の違いと覚え方の自分用まとめ(外部表、駆動表もメモ):ぱーくん plus Idea

6. SQLの整形

お世話になっているリンク:SQLフォーマッターFor WEB:ドットツールズ
和美は入力が面倒なのでインデントが嫌いなのですが、保守性( 自分が書いたSQLを他の人が変更する可能性 )を考えるとインデントを入れた方が読みやすいのかな、と思ったので、SQL文が完成したらこちらで整形しています。
参考SQLを見ていると、カンマ整形は前区切りの方が多いようですね。和美は後ろ派です。
AND・ORは前、予約語は大文字、インデントはスペース2派です。でもasは小文字の方が読みやすいような気もします。
なお、上記リンクは CROSS JOINが改行される不具合があります。( 2021年2月2日現在 )

予約語を含めて全て小文字派の主張を読みましたが、今の仕事で、シンタックスハイライトが存在しないソフト附属のエディターを強制されています。
参考リンク:分析SQLのコーディングスタイル:クックパッド開発者ブログ

7. エラー表示

ずっとSQLで「テーブルの別名がエラー」と表示されて何だろうと試行錯誤をしていたら、項目の間にカンマがないのが原因でした。
エラーの原因は分かったのですが、一ヶ所しかないFROMでも悩むのに、該当箇所がいくつもある単語ではなく、もう少し長めに引用して特定できるようにしてほしい、と毎回思います。
和美が出すエラーは、項目の間のカンマがないか、項目の最後(次がFROM)なのにカンマがあるかのどちらかが多いです。
…… 前章のブログ執筆者のように、カンマを前区切り派に乗り換えたら良いのでしょうが …… 生理的に受け付けられません。

最後に

SQL関係のメモのうち、一本の記事にならなさそうな内容をまとめてみました。
当面続くvs SQLite関係の第一弾です。( 現段階で第五弾まであります )
データベースがマイナーなので知らない方も多いかとは思いますが、自分の備忘録を兼ねて書き続けていきます。
ACCESS講座
こんにちは、和美です。

仕事でなぜかAccessを使わされる羽目になったものの、全く理解が追いついていません。
という話を臨時上司にしたら、就業時間外にAccessの講座を開いてもらうことになりました。

そんな講座のまとめ記事、後編です。
前編はこちら

【 目次 】

  1. 初めに
  2. Functionと変数
  3. 配列
  4. Finally
  5. データの中身
  6. 最後に

1. 初めに

和美の知識はExcel、Java、SQL、全てが中途半端に曖昧です。
そして、あちこちに話が飛びます。
今回はAccessVBAの作り方がメインです。

2. Functionと変数

まずは用語から。
普通のVBAは 『 Sub ○○( ) 』 で始まり、『 End sub 』で終わります。

Sub 値貼り付け()

With ActiveSheet.UsedRange
.ClearFormats
.Value = .Value

End With

End Sub


などですね。
( 実際にExcelVBAで使ったコードです )
このSubは、Subだけで完結したプログラムです。
他にFunctiontionというものがあります。
こちらはSubの中で 『 Call ○○(△△)』のように呼び出されるので、Functionだけでは動きません。
括弧の△△に数字などを入れて送ると、計算など加工して結果を返してくれるプログラムです。
臨時上司など、一般的には 「 関数を独自に作れる 」 と表現されることが多いです。

繰り返しなどに使う変数は、VBAの場合Dimを使って、
Dim i As Integer
のように表記します。
変数iは数字ですよ、という意味の宣言ですね。
このDimはプライベート変数と呼ばれ、一つのSubの中だけで使えるそうです。
( 宣言だけならDim iでも大丈夫です )

Sub 文字列結合()

Dim i As Integer 'ループ
Dim bre2 As String 'B列
Dim cre2 As String 'C列

For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
bre2 = Cells(i, 2)
cre2 = Cells(i, 3)

Cells(i, 2) = bre2 & cre2

Next i

End Sub


一つのマクロの中にSubはいくつでも書けますが、次のSubの中で同じ変数iを使う時はもう一度宣言する必要がありますし、Sub毎にリセットされるので数字などの内容は引き継がれません。
…… 繰り返しに使う変数は普通使い回さないので特殊ですが。
上に挙げた例だと、bre2やcre2 ( String = 文字列 ) も変数です。

このプライベート変数に対して、グローバル変数というのがあるそうです。
Pablic bre2 As String
のように宣言すると、全体で共通の変数として使えるそうです。
この変数bre2は、いくつSubを作っても、一度の宣言だけで内容が引き継がれます。

…… 習ったばかりなので、実際に使ったことはありませんが ……。

3. 配列

プログラミングには配列という仕組みがあります。

変数の塊のような仕組みですが、和美も苦手な上にVBAでは使ったことがないので説明は省略します。
け、検索してください ……。
Dim haire2(5) As String
のように宣言すると文字が入れられて、それぞれの文字は番号で呼び出せます。

5というのは上限値で、VBAの場合は0から始まるそう。
0から5までなので合計6種類ですね。
プログラミング言語によって0からと1からの二種類があるので注意。
ちなみに過去に勉強したJavaも同じく0からなので、1から始まる言語は知りません。

4. Finally

実際にマクロを見たのはAccessVBAのみですが、ExcelVBAでも同じようです。

Finally:
Set ○○ Nothing


という使い方をします。
○○の中に入るのはファイル名で、処理の最後に使います。
Javaにも似たような命令があったような。
VBAが終わってもAccessが閉じられるまでメモリが開放されません。
いつまでも放置しておくとパソコンの動きが遅くなる可能性があるので、使い終わったメモリを破棄する命令です。

5. データの種類と中身

AccessとExcel、両方ともVBAの機能がありますが、それぞれ扱うデータの種類が違います。
Accessはメインがデータベース、取り込める外部データとしてcsvやテキストなどがあります。
Excelはメインが行、列とセル、取り込める外部データとしてテキストなどがあります。

6. 最後に


Accessは基本的にVBAではなく最初から用意されているクエリを使うべき。
全てVBAで処理しようとする人は、上級者ではなく 「 データベースの設計能力がない人 」 です。
という旨の文章を見つけて心から同意しました。
参考元サイト:別のテーブルへレコードを追加する:Ac2002-VBAの沼

ですが、VBAはプログラミング言語の中で一番簡単な部類ですし、臨時上司曰く、SEにとっては 「 できて当たり前の基礎知識のうちの一つ 」 とのこと。
そして、見ず知らずの他人が作った基本構造が悪いデータベースを作り直せるなら、話はもっと簡単です。
…… 頑張るしかなさそうですね。

最終回にAccessのフォームの記事を予定していたのですが、書いたメモをまとめないまま半年以上経ってしまったので断念します。
そのうちしれっと全三回に変わっているかもしれませんが、期待はしないでください。
Access講座
こんにちは、和美です。

仕事でなぜかAccessを使わされる羽目になったものの、全く理解が追いついていません。
という話を臨時上司にしたら、就業時間外にAccessの講座を開いてもらうことになりました。

そんな講座のまとめ記事、前後編のうちの前編です。
今回はAccessの基礎知識編の初級 …… だと思います。

【 目次 】

  1. 初めに
  2. データ型指定
  3. オートナンバーと主キー
  4. csv
  5. ODBC
  6. MS-JET
  7. ADOとDAO
  8. 最後に

1. 初めに

前提条件として、和美の知識はExcel、Java、SQL、全てが中途半端に曖昧です。
おかしいな、プログラマーって未経験から三ヶ月で一人前になれると聞いたのに、もう一年半経ってしまいましたよ。
なお、あちこちに話が飛びます。

2. データ型指定

Accessは、というかAccessに限らず、大抵のデータベースは入力する内容 = データ型を指定する必要があります。
練習のために作ったデータベースでは、オートナンバー、数値、日付 / 時刻、短いテキストの四種類しか使っていませんでした。
オートナンバーは後述。
Yes - No型は使ったことがありませんが、『 短いテキスト型 』 よりサイズが小さく、日付・時刻型は数値型よりサイズが小さいそうです。
Accessのデータは重くなりがちなので、なるべく適切な型を指定することでサイズの軽減を図るそう。
後で加工する時に色々便利ですしね。
データベースのSQLiteエスキューライトのように、データ型を指定しても型にあてはまらないデータを挿入できるシステムは少なく、基本的には型と一致していないデータは入力できないので、データの誤入力を防げるという利点もあります。
実例を挙げると、『 数値 』 と指定したところに文字は入れられず、エラーとなります。

3. オートナンバーと主キー

臨時上司が作った、仕事で使っているAccessVBAのコードを見ました。
Excelと同じように、Accessでも簡易プログラミングソフト『 VBA 』 が附属しています。
VBAとマクロはよく混同されますが、VBAで組んだプログラムをマクロと呼ぶそうです。
Accessにある 『 モジュール 』 というのもマクロと同じVBAの一種で、式ビルダーは関数の一種とのこと。
…… Accessでは、VBAとマクロが違うものを指している気もしますが。

Accessなどのデータベースソフトでは、同じ内容のデータを区別するために、主キー( プライマリキー )と呼ばれる数字を設定することが多いです。
参考書などでよく説明に出されるのが社員番号です。
社内に同じ社員番号の人はいないので、番号だけで一つのデータが特定できます。
国民全員に11桁の別々の番号が振られるマイナンバーも同じですね。

なお、小学校や中学校などの出席番号では、「 隣のクラスに同じ番号がいる 」 可能性が高いので、出席番号に学年、組を足した 『 複合主キー 』 という形態になります。
出席番号だけ、学年と組だけ、など二つは同じ人がいても、この三種類が全て同じ番号はいません、という組み合わせです。
例:
行数:学年:組:出席番号:名前:解説
1:1:A:2:岡森 賢  :4行目に同姓同名の別人がいる。
2:1:A:3:永井 美夏 :出席番号以外は1行目と同じ。
3:1:B:2:岡森 賢  :組以外は1行目と同じ。
4:1:B:3:間瀬 陽美 :組以外は2行目と同じ。
5:2:A:2:村田 歩  :学年以外は1行目と同じ。

名前参考:日本人名前自動生成機:樹凱.com様


…… 複合主キーは少ないほうがいいですし、出席番号は毎年変わるので、別の番号を設定することのほうが多いかと思いますが。
前年の組データも保存しておいた方が良いですしね。
上記の例の行数のように、順番なんてどうでもいいけど、とりあえず主キーに設定する時によく使われるのがオートナンバーです。
登録順に自動で採番してくれるので重複はなく、主キーには便利です。

同姓同名なんて滅多にいないのでは、と思われるでしょうが、和美が高校生の時、隣の組に同姓同名の漢字一文字違い( 光士、光志のように漢字も似ている )がいました。
日本語を主キーにしてしまうと、登録時の入力間違い、検索時の変換ミスでデータが存在しない、という事にもなりかねませんし、年金の記録が間違っていてたまにニュースになっています。
アルファベットでも別に構わないと思いますが、上述したデータの型指定では 「 短いデータ型 」 に分類されるため、数字、アルファベット、日本語の中では数字が唯一軽いです。

ですが、Accessでデータをこねくり回す時以外には使わないので、Excelデータなどで加工できるcsvデータには不要です。
なので、Accessからcsvを書き出すマクロには、主キーに設定されている一列目のオートナンバーを除外する、というコードが書かれていました。

AccessにしろExcelにしろ、VBAの勉強に、実際のコードを見てみるのはいいそうですよ。
…… こんなことを書きつつ、まだ該当の臨時上司が作ったAccessVBAコードを見ていなかったので、ようやく見ました。
Excelとは違ってAccessには開発タブがないので探しましたが、すっきりした簡潔なコードで羨ましいです。

4. csv

さらっと書きましたが、知らない人が身近にいたので、ファイル形式:csvの解説もしておきます。
csvとは、メモ帳などでも開けるカンマ( , )区切りのファイル形式で、プログラミングにはよく出てきます。
Comma Separated Value(= カンマ( , )で区切った値 )の略称だそうです。

5. ODBC

Open Database Connectivityオープン・データベース・コネクティビティの略。
コネクティビティはコネクト(接続)の派生で、接続しやすい、のような意味らしいです。

さて、ODBCとは、SQLとAccess、AccessとOracleなど、違うソフトのデータベースを翻訳する機能、ツールの一種だそうです。
似たようなソフトにOracleだとオラクルクライアント、フリーでは A5:SQL Mk-2などがあるそう。
A5:SQL Mk-2は、昨年2019年の九月頃、MySQLと戦っていた時に相談した質問掲示板で紹介されました。

和美は英語が嫌いですが、プログラマーになるには初めに英語を勉強するといい、という笑い話のような提案もあるそうですね。
( 元プログラマーの父には否定されましたが )
たまに英語の意味が分からなくて調べると、英検二級~一級レベルという表記が多いです。

6. MS-JET

『 MS-JET 』 こと 『 Jetデータベースエンジン 』 はAccessの中身だそうです。
Jetだけだと使い辛いので、ソート機能などの機能を付け足したのがAccessになります。
というのはAccess2003までの話で、拡張子が.mdb。
Access2007以降は正式名称 『 Access Database Engine 』 らしいですが、発表当初の 『 ACEエースデータベースエンジン 』 と呼ばれることも多いそうです。
拡張子は.accdb。
単体でも無償配布されているのでAccessがなくても使えるそうですが、よほど詳しい人でもない限りそんな機会はないのでは、と思います。
なお、JetはAccessとは関係のないソフトにも広く使われたそうですが …… 詳しくは知りません。
参考サイト:Accessデータベースエンジン:IT用語辞典 e-Words

7. ADOとDAO

AccessVBAにはデータベースの作成方法として二種類あるそうです。
それがADOとDAO。
DAO:昔からある形式で、上述したODBCを使っています。
MS-JET専用とのこと。
接続方法は、AccessVBA‐DAO‐JET┬Access
                  └ODBC‐SQL
MS-JETからAccessやODBCに分岐するため、作り直す必要が出てくることが多い、Access以外は汎用型のODBCを経由するため遅くなるという難点があるそうです。
ADO:新規で作るなら基本的にこちら。
ソフト間のデータ連携を行える、非リレーショナルデータベースでも使えるOLEという機能を使っているそうです。
非リレーショナルDBデータベースとは、NoSQLとも呼ばれます。
AccessやExcelのような行と列で表形式にできるデータベースをリレーショナルDBと呼び、文章のように形式が決まっていないものが非リレーショナルDB( 非構造化データ )のようです。
代表例はTwitterによるトレンド分析でしょうか。
参考サイト:DBテクノロジーの過去と現在と未来:Data Technology

接続方法は、AccessVBA‐ADO‐OLE┬SQL
                  └Access
OLEまでが共通で、その次は直接他のソフトに繋がるので、作り直しが少ないのが特徴です。

8. 最後に

技術面が足りていない自覚はありましたが、知識面も全く足りていないことがよく分かった初回講座でした。
入社直後、先輩から「 一度で良いから理屈を捏ねくり回した本を読んでおいてほしい 」と三冊の本を勧められたのを思い出します。
( 難易度と時間の都合で、まだ一冊目を読み返している最中ですが ……)

また、Accessの中身を気にしたことがなかったのですが、AccessVBAを書いていると宣言に出てきたり、設定が必要だったり、できることが違ったりと色々あるようです。
使えるソフトなら中身などブラックボックスでいいと思うのですが、世の中そう上手くはいかないようです。
本のイメージ
こんにちは、和美です。
仕事でデータベースシステムが使えるソフトを使って開発をしています。
個人利用のデータベースの用途って何だろう、から始まった考え事です。

【 目次 】

  1. 初めに
  2. 同人誌の管理ソフト
  3. 無料のデータベース
  4. 最後に

1. 初めに

勉強のためにデータベースの利用例を検索しても企業の情報管理しか出て来ず、個人用途は住所録以外は何に使えるんだろう ……と思っていました。
そこでふと思い出したのが、同人誌の管理データベースです。

2. 同人誌の管理ソフト

同人誌の管理データベースは、コミックマーケットで開発途中の試用版が配布された後、そのまま開発が止まってしまったようなのです。

今回改めて検索したところ、そのシステムかは分かりませんが、既に何件かあるようです。
パソコン向けのみ。スマホは突然データが飛ぶものだと認識しているので除外しました。公開されないのなら自分で作ってしまえ、分類には図書十進分類法やコミックマーケットのジャンルコードも使いたいなぁ、などと技術もないのに色々考えていたのを思い出しました。
参考リンク:図書分類検索(日本十進分類法NDC 新訂9版:綱目表)※最新は第10版です。
コミックマーケットのジャンルコード:Wikipedia

一般向けの個人蔵書管理は下記が有名なようです。
参考リンク:私本管理マニュアル

…… 結局、個人向けデータベースはどんな用途があるのかは相変わらず不明なままです ……。
日本で一番多く使われているデータベースは年賀状ソフトでは。( 名推理 )

かなり昔、クラシックの楽曲データの管理ソフトの相談を読んだことを思い出しました。
録音年、指揮者、楽団、作曲者名、曲名のいくつかが重複するため、通常の音楽ソフトでは管理できないそうです。

3. 無料のデータベース

という事で無料のデータベースを調べてみました。
【データベース28選】 データ管理を効率化!データベースソフトの機能や選び方を解説!:QEEE
こちらは入力チェックが甘くて現在苦労しているSQLiteしか出て来ませんでした ……。
無料で使えるデータベース4選!知っておくべき利用の注意点とは:ITトレンド
上記より種類が少ない割に厳選されているのか、マシな結果が出てきました。
MySQL、MariaDB、Postgreは知っているのに、MongoDBは初耳でした。
ただ、PostgreSQLポストグレイスは、略称のポスグレしか聞いたことがなく、初めて正式名称を知りました。

MongoモンゴDBはキーバリュー型なので、知っていると書いた三種類とはかなり毛色が違うようです。
参考サイト:やってみようNoSQL MongoDBを最速で理解する:Qiita

キーバリュー型もよく分かっていなかったので説明を読んだところ、クエリをJavaScriptで発行するなどややこしそうな印象の上、同人誌管理システムは従来の行指向性の方が向いているようです。
テキストマイニングなどには使えるのでしょうか。
データベース、もう少し掘り下げてみよう!「列指向データベース」と「データウエアハウス」と「Business Intelligence」:JTP 日本サード・パーティ株式会社
NoSQLに関しては、MySQLをNoSQLのDBとして利用する知見が溜まっているようです。

4. 最後に

まあソフトを作るのも大事ですが、使い続ける ≒ 入力し続ける事が一番大事なんですけれどね。
と、購入した同人誌の一覧を書き続けるのを途中で断念した過去を思い出しました。
冒頭で挙げた同人誌管理システムは入力項目が公開されていたので、数年は購入した同人誌の情報を全てメモにまとめていたのです。
ページ数など、本を見ただけでは分からない情報も多かったと記憶しています。
スラック分報
こんにちは、和美です。

仕事で何かを検索していた時に見つけた、「Slack分報」と俗称されるツール、というか考え方が面白かったので紹介です。

【 目次 】

  1. 初めに:Slackとは
  2. Slack分報
  3. 代用策1:エクセル時報
  4. 代用策2:ちゃっとわーく分報
  5. 最後に

1. 初めに:Slackとは

今回の主題である「 Slack分報 」 の前に、使用されているツール 「 Slack 」 の解説です。
最も有名なビジネスチャットツールです、と書いてもよく分からないと思いますが、GoogleのハングアウトやSkypeのような、仕事で使えるLINEのようなものです。
…… と思っています。和美の職場ではハングアウトとChatworkという別のツールが導入されていて、Slackは使ったことがありません。
Slackは同名サービスを提供する単独の会社でしたが、先日、セールスフォースという会社に買収されましたね。
最近のIT企業のトレンドは、単独で大きくするのではなくそれなりに知名度が挙がった時点で売却だ、と数年前に聞きましたが、単独ではMicrosoftに対抗できないので合併した、というのが実情のようです。
ビデオチャット最大手のZoomはまだ単独で頑張っているようですが。

2. Slack分報

さて、本題の「Slack分報」の話です。
チャットツールなので一対一のやり取りもできますが、今回の「Slack分報」はグループチャットの機能を使います。
仕事中に社内SNSに気軽に呟こう、という意図で、クローズドのTwitterみたいな感じでしょうか。
見ているはずでも、反応があったりなかったりするのがポイントです。
Twitterとは違って完全に身内専用なので、社外秘のプロジェクトを話題にしても問題ありません。
参考ページ:Slackの”分報チャンネル”を全社的に導入してみて分かったこと:株式会社GIG
こちらの説明が分かりやすかったです。

3. 代用策1:Excel時報

…… 上述のSlack分報は以下のリンク先で知りました。
#Slack分報ならぬエクセル時報がよき:note
自分のために、Excelに作業予定と作業完了内容を書くという概要が、提出しなくなった今の業務日報だと思いました。
Excelに下書きをして、報告は文字だけ直接入力です。
難航した部分が自分で分かるので便利。

やる気が続かないので15分毎程度でアラートがほしいと思いながら、ポロモードテクニックは使い続けると疲れるという意見にも納得しました。
とりあえず「今日のハイライト」から書いてみようかなぁ。と思いつつ、完成させられたら仕事達成!の内容がなかなか達成できない事も多かったりはします。
ちょうどこの記事を読んだ日に決めた「今日のハイライト」は、職場の人にご協力頂いて原因は特定できたものの、結局開発元に問い合わせる羽目になりましたし。

4. 代用策2:ちゃっとわーくす分報

Chatwork
和美の勤務先では、上述の1.初めにで触れた通り「Chatwork」というチャットツールが導入されています。
なので、Slack分報とExcel時報を掛け合わせて、Chatworkにある「マイチャット」でひたすら書いています。
マイチャットはChatworkがデフォルトで用意している、メモ、タスク管理、ファイルサーバーなどに使える自分専用のチャットです。
内容は、Excel一日分をメールで携帯に送ってMastodonで叫ぶのと、同じ内容がある程度溜まったら、メモ帳にコピーして清書してブログ記事にしています。この記事とか。
サービス名が「Chatwork」なのに「ちゃっとわーくす」なのは、変換ミスの賜物です。

5. 最後に

ちゃっとわーくす分報で使ってみた感想としては、書いて考えがまとめられるのと、記録として残せるのがいいですね。
欠点は、Slack分報の参考リンク先にも書かれていた通り「気が散る」
ですが、まとめてブログ記事にもできるので、仕事に余裕がある間は使い続けるつもりです。

余談。Excel時報のリンク先で紹介されていたスマホアプリの「オオエン」が気になります。
累計アクセス数
アクセスカウンター
レコメンド
プロフィール
書いている人:七海 和美
紹介:
更新少な目なサイトの1コンテンツだったはずが、独立コンテンツに。
PV数より共感が欲しい。
忍者ブログ [PR]