No Programming, No Life

プログラミング関連の話題や雑記

IT用語斜め読み - アラート

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

いつもお世話になってるいる IT用語辞典 e-Wordsさん。 今回はアラートについて見ていきます。 これ、2020/6/3のIT用語辞典さんのアクセスランキングで1位になってたんですが、東京アラートが影響だよね、たぶん。

アラートって何?

まずは概要から。

アラートとは、警告(する)、警報(を出す)、警戒態勢、油断のない、機敏な、などの意味を持つ英単語。ITの分野では、システムなどが利用者に注意や警戒を促すために表示・通知するメッセージなどのことを意味する場合が多い。

IT用語辞典 e-Words より

今がIT用語の方を知りたいのでしたね。なので意味としては、ITの分野では~以降の利用者に対する注意や警告を促すメッセージの意味となります。

本当に〇〇しますか?

パソコンやスマホを利用しているときに、「本当に〇〇しますか?」「はい/いいえ」と聞いてくるダイアログを皆さんももちろん見たことがあると思います。 個人的には「はい/いいえ」で選ばせるスタイルはドラクエを思い出してしまうんですが…それはいいとして。 アラートはこのように、システム側から利用者に通知される警告メッセージや注意喚起のメッセージ、それから上記の「はい/いいえ」のようにユーザに同意を求めてくるタイプのものがあります。 JavaScriptには alert っていうそのものの関数がありますよね。

アラート通知

また、メッセージボックスのようなものだけではなく、ユーザがあらかじめ通知先や通知方法を指定して特定のアドレスに電子メールを送信するとったようなアラート通知というものもある。 危険性などの通知以外の用途でも、あらかじめ指定しておいた条件が満たされたときに自動的に利用者に発信される通知全般を指してアラートという場合もあるとのこと。例えばオンラインショップのサイトでウォッチリストに入れた商品の価格が下がったら知らせて欲しい、とか、カレンダーアプリで予定時刻が近づいてきたら知らせて欲しいとかそういったものだ。

まとめ

  • アラートの本来の意味は、警告(する)、警報(を出す)、警戒態勢といったよなもの
  • IT用語としては、システムからユーザに対して伝えられる警告、またはユーザに確認を求めるダイアログなどで実装される
  • 講義には、通知の用途に利用されるものも全般的に含まれる

リンク

IT用語辞典 e-Words

VBAでメッセージフォーマット

f:id:fumokmm:20200504205857p:plain

VBAの標準関数にメッセージフォーマットしてくれる関数が無いような気がしたので書きました。 エラー処理などは省略していますので、実用の際は適当に拡張してお使い下さい。

概要

メッセージをフォーマッティングしたいとき、テンプレートとなる文字列を用意しておいて、 可変となる部分に埋め込みパラメータを入れておいて置換していく関数です。 VBAなどで標準モジュール内に関数を入れておけば、例えばExcelで使う場合などは ワークシート関数としても利用可能となります。 サンプルは利用例をご覧ください。

仕様

  • 埋め込みパラメータは "{}" とします (Logback風)
  • 第1引数にテンプレートメッセージを指定(必須)
  • 第2引数以降に埋め込むパラメータを指定(可変長, 0個でも可)

ソース

Option Explicit

'''
' MessageFormat関数
' パラメータ埋め込みメッセージフォーマッティング処理
'
' 処理概要:
'   テンプレート文字列に対して、パラメータを埋め込んだメッセージを返却します。
'     ・テンプレート中のパラメータ埋め込み部分(プレースホルダ)は "{}" で記述します
'     ・プレースホルダは登録順に引数の埋め込みパラメータ分、置換されていきます
'
' 引数:
'   x_templateMessage - テンプレートメッセージ
'   x_params          - 埋め込みパラメータ
'
Function MessageFormat(ByVal x_templateMessage As String, ParamArray x_params() As Variant) As String
    Dim p_pos As Long: p_pos = 1
    Dim p_posFound As Long: p_posFound = 0
    Dim p_result As String: p_result = ""
    
    Dim i As Integer
    For i = 0 To UBound(x_params)
        ' プレースホルダ {} を検索
        p_posFound = InStr(p_pos, x_templateMessage, "{}")
        ' プレースホルダ {} が見つからなかった場合
        If p_posFound = 0 Then
            Exit For ' 置換終了
        End If
        
        p_result = p_result & Mid$(x_templateMessage, p_pos, p_posFound - p_pos)
        p_result = p_result & CStr(x_params(i))
        p_pos = p_posFound + 2
    Next i

    ' 残分を追加
    If p_pos < Len(x_templateMessage) Then
        p_result = p_result & Mid$(x_templateMessage, p_pos, Len(x_templateMessage) - p_pos + 1)
    End If
    
    ' 結果返却
    MessageFormat = p_result
End Function

挙動とは関係ないですが、VBEのエディタが貧弱なので、変数名に以下のコーディングルールを採用しています。

  1. 引数の変数名は "x_" で始める。その後ろは自由
  2. ローカル変数名は "p_" で始める。その後ろは自由

上記コードもこのルールで記述しています。

利用例

f:id:fumokmm:20200602231014p:plain

まとめ

  • 今回はVBAの標準関数にメッセージフォーマットしてくれる関数が無いようなので書いてみました
  • 上記利用例の様にワークシート関数として利用できる他、VBAコード内でログ出力や、メッセージボックスの文言を生成する場合などにも利用できるのではないでしょうか

SQL Serverで列定義を後から変更するSQL

f:id:fumokmm:20200529164347p:plain

いわゆるAlter文ですね。覚えられないのでメモしていきます。

列にNot Null制約を付与する

ALTER TABLE <テーブル名> ALTER COLUMN <列名> <型> NOT NULL;

ALTER TABLE USER ALTER COLUMN USER_NAME NVARCHAR(50) NOT NULL;

列のデフォルト値を変更する

ALTER TABLE <テーブル名> ADD DEFAULT <デフォルト値> FOR <列名>;

ALTER TABLE USER ADD DEFAULT 0 FOR DEL_FLG ;

参考

IT用語斜め読み - ミドルウェア

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

いつもお世話になってるいる IT用語辞典 e-Wordsさん。 今回は何となく気になったミドルウェアについて見ていきます。 ミドルウェアって、IT系のお仕事をしているサーバ寄りの方にはなじみが深いのかなと思います。 逆にフロント側、HTMLでWEBでみたいな感じだとあまり関わりがないのかな?

ミドルウェアって何?

まずは概要から。

ミドルウェアとは、ソフトウェアの種類の一つで、オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの。OSが提供する機能よりも分野や用途が限定された、具体的・個別的な機能を提供する場合が多い。 IT用語辞典 e-Words より

うん、これだけじゃ分かりづらいですね。もう少し嚙み砕いてみましょう。

OSとソフトウェアの仲介役

OSの提供する機能は沢山あるし、直接APIを呼び出すのも大変だ。簡単に言うと、ミドルウェアはそれを使う業務アプリケーションがOSのことを気にせずに機能を利用できるようにするためにいるOSとアプリケーションの仲介役みたいなものだ。この中間層を準備するっていう発想はバーチャルマシン(VM)っぽいな。

ミドルウェアの守備範囲

どのようなソフトウェアがミドルウェアとして提供されるかは分野によって大きく異なる。

などがミドルウェアとなることが多いらしいです。

など、パソコンならOSが提供するような機能がミドルウェアとなることもあるが多いらしいです。

まとめ

リンク

IT用語辞典 e-Words

IT用語斜め読み - VPN

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

最近のIT用語検索トレンド

いつもお世話になってるいる IT用語辞典 e-Wordsさんの 2020年5月4日(月)のアクセスランキングを見てみると、

1位 SNS 2位 サインイン 3位 スクリプト 4位 PDF 5位 情報 6位 API 7位 Web 8位 オンデマンド 9位 サブスクリプション 10位 HTTP 11位 VPN 12位 レンダリング 13位 プラットフォーム 14位 デバイス 15位 OS

となっていました。新型コロナウイルスの影響でリモートワークを始めたという人も増えている時期だと思いますので、今回はこの中で気になった11位のVPNについて見ていきたいと思います。

VPNって何?

まずは概要から。

別名: バーチャルプライベートネットワーク仮想専用ネットワーク

VPNとは、通信事業者の公衆回線を経由して構築された仮想的な組織内ネットワーク。また、そのようなネットワークを構築できる通信サービス。企業内ネットワークの拠点間接続などに使われ、あたかも自社ネットワーク内部の通信のように遠隔地の拠点との通信が行える。 IT用語辞典 e-Words より

低コスト

昔はこのような用途のために専用線を引いていたが、現在ではインターネットを利用した「インターネットVPN接続」で可能となるため、低コストで通信が可能となるとのこと。 ただ、どうしてもインターネット経由なのでセキュリティや通信品質の確保はキャリアの通信網を利用するよりも難しくなる。

VPNルータ

VPN(Virtual Private Network:仮想専用ネットワーク)構築のための機能を持ったもののこと。 通常のルータとしての機能の他にVPNゲートウェイとしての機能を持ち、ネットワークを介して他のVPN機器との間で暗号化された専用の通信路を形成することができる。

まとめ

うん、ネットワークさっぱりわからん。ざっくりとインターネット経由で暗号化した社内LANという感じですね。

リンク

アクセスランキング - IT用語辞典 e-Words

【VBA】VBAプロジェクトの全ソースを一括エクスポートする

f:id:fumokmm:20200504205857p:plain

VBAプロジェクトのソースって、他のJavaやCなどのプログラミング言語と違って、ExcelAccessVisual Studio Editor(VBE)をわざわざ開かないと閲覧・編集できないし、バージョン管理もしづらいですよね。そんなとき、ソースを右クリックし「ファイルのエクスポート」をすることができますが、これがファイル単位でしか行えないから非常に不便、みなさんそんな風に感じませんか?

そこで、この記事では、そんな悩み多きVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介します。

なお、この記事ではExcelを例にご紹介しています。Accessなどでも同様のことを行いたい場合は、少しの修正で対応が可能になると思います。

想定読者

この記事はある程度VBAのスキルがある読者を想定しています。少なくてもVBAプロジェクトのソースをエクスポートして、ソース管理したいな・・・と思えるくらいの人を想定しています。

準備

まずはVBAプロジェクトの下準備が必要です。具体的には以下の参照設定にチェックが付けられているか確認して下さい。

f:id:fumokmm:20200504182529p:plain
Microsoft Visual Basic for Applications Extensibility 5.3への参照設定にチェックを付ける

f:id:fumokmm:20200504182726p:plain
Microsoft Scripting Rungimeへの参照設定にチェックを付ける

方法

1.まずVBEを開きます。(Alt + F11)

2.標準モジュールで新規モジュールを作成します。例ではExportModuleという名前で作成しました。(名前は任意)

f:id:fumokmm:20200504183504p:plain

ソースはこちら (ExportModule)

Option Explicit

Sub ExportMacroSource()
    ' [参照設定] Microsoft Visual Basic for Applications Extensibility 必要
    ' [参照設定] Microsoft Scripting Rungime 必要

    Dim p_fso As Scripting.FileSystemObject
    Set p_fso = New Scripting.FileSystemObject
    
    Dim p_macroDir As String
    p_macroDir = p_fso.BuildPath(Application.ActiveWorkbook.Path, "MacroSource")
    If Not p_fso.FolderExists(p_macroDir) Then
        p_fso.CreateFolder p_macroDir
    End If

    Dim p_vbComp As VBIDE.VBComponent
    Dim p_typeLabel As String
    Dim p_extension As String
    Dim p_outputFileName As String
    For Each p_vbComp In Application.VBE.ActiveVBProject.VBComponents
        ' タイプから拡張子を特定
        Select Case p_vbComp.Type
            Case vbext_ct_ActiveXDesigner
                p_typeLabel = "ActiveXDesigner"
                p_extension = "cls"
            
            Case vbext_ct_ClassModule
                p_typeLabel = "ClassModule"
                p_extension = "cls"
            
            Case vbext_ct_Document
                p_typeLabel = "Document"
                p_extension = "cls"
            
            Case vbext_ct_MSForm
                p_typeLabel = "MSForm"
                p_extension = "frm"
            
            Case vbext_ct_StdModule
                p_typeLabel = "StdModule"
                p_extension = "bas"
        End Select
    
        ' エクスポート実施
        p_outputFileName = p_fso.BuildPath(p_macroDir, p_vbComp.Name & "." & p_extension)
        Debug.Print "[export] " & p_outputFileName
        p_vbComp.Export Filename:=p_outputFileName
     
    Next p_vbComp
    
    Debug.Print "Finish export."

End Sub

3.ExportModuleを開いているエディタ上で、F5をクリック (実行)します。

4.イミディエイトウィンドウにも出力結果が出力されます。

f:id:fumokmm:20200504184452p:plain
イミディエイトウィンドウの出力結果

5.Excelファイルが置いてあるパスと同じパスに「MacroSource」というフォルダが作成されVBAプロジェクトの全ソースが一括エクスポートされます。

f:id:fumokmm:20200504184612p:plain

注意として、2回出力するとソースは上書きされますのでご注意下さい。 あとは、お好きなソース管理システムにコミットして下さい。

信頼性に欠けるというエラーが出た場合は?

実行時に「信頼性に欠ける」というエラーが出た場合、「開発者向けのマクロ設定」の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックボックスにチェックを付けてから実行してみて下さい。

f:id:fumokmm:20200504184101p:plain

f:id:fumokmm:20200504184134p:plain

f:id:fumokmm:20200504184150p:plain

まとめ

ここではVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介しました。 アドインにするなどすればもっと便利にできると思いますが、サクっと一括エクスポートできる環境を整えたい場合には、ぜひ今回ご紹介した方法を利用してみて下さいね!

参考

MS Access のVBAモジュールを全てエクスポート | mofu犬blog

Groovyで2回目の呼び出し以降は計算せず高速で値を返却するメソッドを作る

2回目の呼び出し以降は計算せず高速で値を返却するメソッドを作ってみました。 いわゆるメモ化ですね。Groovyの場合はクロージャが使えるので、理解しやすいと思います。

動作環境

Groovy Version: 3.0.2 JVM: 14 Vendor: Oracle Corporation OS: Windows 10

ソース

def calc(num1, num2) {
    def num = num1 + num2 // 計算結果をここで保持
    return { num } // 計算結果を返すクロージャを返す
}

def doCalc = calc(5, 8)
assert doCalc() == 13
  • 最初に calc メソッドが呼ばれた時に1回だけ num1 + num2 が計算されて、結果が num に格納されます
  • 格納された num を返却するクロージャが返却されます
  • 返却されたクロージャは何度呼び出しても num を返却するだけなので高速です