20260308 (素人です)bitlockerについてメモ

20260308 (素人です)bitlockerについてメモ


近々、会社で、外部媒体(USB)を接続する場合、BitLockerを、適用するそうです。

開始前のメモ。


(1)
ビットロッカーは、Cドライブ(本体)用の①BitLockerと外部媒体(USB)用(Dドライブなど)の②「BitLocker To Go(外付けドライブ用BitLocker)」がある。

①は、すでに適用済みで、今回は②のことになる。

(2)上記の「BitLocker To Go」を適用する場合、「回復キー」と「パスワード」の作成が必要になる。
(回復キーはほとんど日常は使用しない。)
接続する場合、パスワードを求められる。

(3)有効化した後でも、無効化は可能。
パスワードで無効化は可能。(しかし、有効化する場合、回復キーもすべてやり直し)


(4)「BitLocker To Go」を有効化し、PCにつないだままの場合は、例えば、そのUSBにバックアップなどしようとしても問題ない。(パスワードなどを聞かれたり、止まることはない)

(5)上記(4)同様にマクロで、USBの中のファイルに、例えば書き込みする場合でも、問題ない。

(6)「BitLocker To Go」無効化は、当該PCでなくても可能。(パスワードで可能)
一応、上記は、会社での適用前に、自分で試してみたことです。
会社で適用が始まれば、毎回、(抜き)差しごとにパスワードを聞かれたりすると思います。

始まってみないと分からないなあ。



 

(素人です)仕事場のIT関係のことなど多くが変わりました

ここ1年の間に、仕事場のIT関係のことなど多くが変わりました。

今頃になって、備忘録メモ。
(一昨年は、「オブジェクト志向備忘録」を途中までで終わっていた、IT素人です。)

(1)ローカルブレイクアウト実現(プロキシサーバー不要に)
通信回線改修が必要だったらしいです。

(2)ゼロトラスト構想実現
①M365有償版導入(ラベル管理などセキュリティー強化)
②セキュリティ対策ソフト強化

(3)データをクラウド

(4)その他、M365有償版で実現可能なアプリなど導入


///////////////////////////////////////
(1)と(2)の考え方で、従来とは大きくセキュリティ・通信の考え方が変わりました。
(機材の変更はありますが、「パラダイムシフト」と考えていいと思います。)

従来は、ルーター、ゲートウエイなどで、会社内を守っていました。(城壁で囲んで守るLAN)
現在は、(厳密な説明ではないですが、)城壁はなく、各PCごとに、M365、セキュリティソフト、各PCごとのIDで管理しています。
また、データは、会社のファイルサーバーでなく、クラウド上のサーバ―へ移行です。


///////////////////////////////////////
で、何が変わったか?
上記の、通信・セキュリティ方法だけでなく、
M365有償版によって、業務・仕事の仕方も変化しています。

ざっくり自分の印象ですが、M365有償版は、セキュリティ強化だけでなく、
sharepointを中心に、各アプリを連携して使用することができます。
(会社の規制によってできることは違うと思いますが。)

今まで、エクセル中心に、マクロやパワークエリなどを使ってきましたが、
その場合、各アプリの仕組み(連携)を知っておかないと、なかなか効果的に使えないかもしれません。

例えば、teamsの自分のグループチャットの添付ファイルは、onedreiveに自動保存されます。
他の人が入れてくれたファイルはsharepointに自動保存されます。
(チャネルはまた別です。)
上記のteamsですが、反対から見れば、teamsは、受付であって、onedriveが本体(データ保存箇所)とも言えます。

他にも、powerappsとsharepointを連携させて使うなど、各アプリ間で機能を分けて機能を連携させる必要があります。

今までのように、①エクセル単体で、②自宅で持ち帰ってマクロ作成なんてできない感じです。
(M365有償版は、ビジネス用と考えていいです。管理者の考えによりますが、自宅にPCを持ち帰り(許可申請)やBYODで、できないことはないでしょうが。)

今後、この環境で少しずつ、勉強していきます。

 

ひさびさに再開しようと思いましたが・・・

久しぶりにブログを書く時間が取れそうなので、下書きをしましたが、保存忘れ。

また、今度書きます。

 

久々に、他の方のブログを拝見しましたが、1年たたずに、内容がどんどん変わっている方もいれば(特にAI関係)、ずっと同じテーマを追い続けている方もいます。

 

自分もやらねば。

copilot備忘録 ワード パワーポイント

20250224copilot備忘録 ワード パワーポイント

こちらは、素人です。

これは本当にただのメモ。


ワードとパワポのcopilotを使用してみようと思った。
まず、onedriveにデータを上げないとできないようだ。

ワンドライブは、同期したくなかったので、ずっと放置していました。
同期しないまま、該当ファイルをワンドライブにドロップ。

で、何がしたかったかというと。
ワードは、文書の見出しや段落設定、
パワポは、箇条書きにした文言をきれいに、smartartみたいに、レイアウトしてほしかった。

ですが、copilotは、画面を直接見れないとのこと。

うーん。結局、ワードなどをしながら、いろんなことを調べたり、ワードの使い方をヘルプできるという役割なのかな。

で、結局、ワードは、文書をそのままcopilotに投げて、なんとなくできたもの(太文字など)をワードにコピペ。
パワポは、smartartを使用。

そのうち、ワードやパワポの入力画面自体を見てくれるようになるとは思いますが、今はそんな感じのようです。

エクセルVBA オブジェクト指向備忘録 (カナメ?)同じ処理・違う処理(疑似的継承・インターフェース・アダプター)再びリファクタリング

20250128エクセルVBA オブジェクト指向備忘録 (カナメ?)同じ処理・違う処理(疑似的継承・インターフェース・アダプター)再びリファクタリング


<前書き>
エクセルVBAオブジェクト指向、初心者です。
VBA自体は、以前から使用していました。
オブジェクト指向というものがあることは、知っていましたが、ネットなどを見てもよく分からず、挫折した過去あり。
<以上前書き>


いつも通り、クラスを使いながらも、手続き型のようなコードを書いています。(素人です。汗)
(今回もchatGPT4o様(多分4o)にご協力いただいています。)


長い処理を見ていたら、途中に同じ処理が出ている。
実際には、インターフェースで、振る舞いを別にした箇所の内部が長いコードになっていて、
(それが同じインターフェースの実装クラスにも関わらず)似たような処理になっている・・・。

これって、共通の部分と異なる部分をきちんと把握して、リファクタリングできる気がした。

ふと勝手に考えた方針:
(1)同じ処理は、下部クラスにして、共有する
(2)違う処理は、インターフェースで、分ける

最初ざっくり上記のように考えました。
(そう考えて、chatGPT4o様(多分4o)に質問したりしてました。)
多分、この考えでいけます。(自分のレベルでは。)
(ただし、いちいちインターフェース化するかは微妙です。インターフェース「的」に考えて処理する)
(クラスのメソッド(ファンクションでもいいかもしれない・・・。))


何となく図にすると下記の感じか。


今使える武器・ワザのコード例:協力:chatGPT4o様(多分4o)
========================================================
(1)疑似的継承
-------------------------------------------------------
'標準モジュール
Sub TestFileHandler()    ' (1) 疑似的継承を使う場合 '疑似的継承で同じ処理・個別処理
    Dim Handler As New FileHandler
    Handler.SaveFile "TestDocument.txt" ' 保存処理 + ログ出力
End Sub
--------------------------------------------------------

' 共通処理を持つ親クラス   
'Public Class BaseHandler
    ' 共通のログ出力処理
    Public Sub LogAction(ActionName As String)
        Debug.Print "Action: " & ActionName & " - Logged at " & Now
    End Sub
'End Class
-----------------------------------------------

' 特化した処理を持つ子クラス   ’モジュール1疑似的な継承関係
'Public Class FileHandler
    Private Base As New BaseHandler ' 疑似的な継承  (親クラスをインスタンス化)

    ' 特化した処理を実装しつつ、共通処理を利用
    Public Sub SaveFile(FileName As String)
        ' 保存処理
        Debug.Print "File " & FileName & " has been saved."      '個別処理をここに書く

        ' 共通のログ処理を呼び出す
        Base.LogAction "SaveFile"
    End Sub
'End Class
----------------------------------------------
解説メモ
'子クラスで親クラスをインスタンス化している疑似的な継承関係。
単純に共通部分をくくり出すだけなら、親子のクラスはいらないが、(下部クラスを置いて、くくり出すだけ。)
こうしておくと、共通処理・個別処理の両方が扱える。
(上記の依存関係は、子が親に依存している。)


================================
(2)インターフェース
'標準モジュール
Sub TestDataProcessor()      'インターフェースで使い分け
    Dim Processor As IDataProcessor

    ' CSV処理クラスを使用
    Set Processor = New CsvProcessor
    Processor.ProcessData "Data.csv"

    ' Excel処理クラスを使用
    Set Processor = New ExcelProcessor
    Processor.ProcessData "Data.xlsx"
End Sub

-------------------------------------------------------
' インターフェースの定義
'Public Interface IDataProcessor

    Sub ProcessData(FileName As String)
        '空実装
    End Sub
'End Interface

----------------------------------------
' CSVデータを処理するクラス  ’インターフェース実装
'Public Class CsvProcessor
    Implements IDataProcessor

    Private Sub IDataProcessor_ProcessData(FileName As String)
        Debug.Print "Processing CSV file: " & FileName
    End Sub
'End Class

---------------------------------------
' Excelデータを処理するクラス   ’インターフェース実装
'Public Class ExcelProcessor
    Implements IDataProcessor

    Private Sub IDataProcessor_ProcessData(FileName As String)
        Debug.Print "Processing Excel file: " & FileName
    End Sub
'End Class

-------------------------------
解説メモ
'インターフェースで集約して、各クラスで別作業をさせる
上位のインターフェース自体は、空実装なので、下位の具体的クラスは追加可能。

また(多分ですが、)インターフェースで「依存関係の逆転」が起こります。
下位の具体的クラスは、IDataProcessorに依存しますが、空実装なので、依存していないことになります。(?)
そのため、具体的クラスは、自由です。(すみません。あいまいな言い方です。)


///////////////////////////
解説(1)と(2)
ややこしいけど
(1)疑似的継承は、共通部分を中心にまとめる場合、(2)インターフェースは、具体的クラスの振る舞いが全く違う場合と押さえておくか。

あと、疑似的継承には、下記のようなパターンも考えられる。

 

////////////////////////////
(3)疑似的継承で、親クラスが共通の動きで、子が別の動きの場合
 (別の動き=複数のクラスがあると想定)
======================
 'モジュール3疑似的な継承関係(親共通)(子別動作)

Sub TestAnimalActions()
    Dim MyDog As New Dog
    MyDog.DogAction ' 共通処理(Eat)+ 特化処理(Bark)

    Dim MyCat As New Cat
    MyCat.CatAction ' 共通処理(Eat)+ 特化処理(Meow)
End Sub

----------------------------------------
' 親クラス(共通化)  ’疑似的な継承関係(親共通)(子別動作)
'Public Class Animal
    Public Sub Eat()
        Debug.Print "This animal is eating."
    End Sub
'End Class

----------------------------------------
' 子クラス(特化した動作を持つ)  ’疑似的な継承関係(親共通)(子別動作)’親(共通動作)を子でインスタンス化(疑似的継承)
'Public Class Dog
    Private Base As New Animal ' 疑似的な継承

    Public Sub Bark()
        Debug.Print "The dog is barking."
    End Sub

    Public Sub DogAction()
        ' 共通処理を使用
        Base.Eat
        ' 特化した処理
        Me.Bark
    End Sub
'End Class

----------------------------------
' 子クラス(特化した動作を持つ)  ’疑似的な継承関係(親共通)(子別動作)’親(共通動作)を子でインスタンス化(疑似的継承)
'Public Class Cat
    Private Base As New Animal ' 疑似的な継承

    Public Sub Meow()
        Debug.Print "The cat is meowing."
    End Sub

    Public Sub CatAction()
        ' 共通処理を使用
        Base.Eat
        ' 特化した処理
        Me.Meow
    End Sub
'End Class
-------------------------------
解説メモ
(3)は、(1)と同じやり方で、子クラスが2個ある場合です。
子クラスで、親クラス(共通動作)をインスタンス化しています。
(上記の依存関係は、子が親に依存している。)

///////////////////////////////////////////

(4)疑似的継承で、親クラスが別の動きで、子が共通の動きの場合
(別の動き=複数のクラスがあると想定)

===================================
'疑似的継承で、親が別動作。子が共通動作。
Sub TestAnimalActionsWithParents()
    Dim MyBird As New Bird
    Dim MyFish As New Fish
    Dim MyAnimalActions As New AnimalActions

    ' 鳥の場合
    MyAnimalActions.PerformAction MyBird ' "This bird is flying."

    ' 魚の場合
    MyAnimalActions.PerformAction MyFish ' "This fish is swimming."
End Sub

--------------------------
'疑似的継承親別動作子共通動作
' 親クラス1(空を飛ぶ動物の共通処理)
'Public Class Bird
    Public Sub Fly()
        Debug.Print "This bird is flying."
    End Sub
'End Class

--------------------------
'疑似的継承親別動作子共通動作
' 親クラス2(水中で泳ぐ動物の共通処理)
'Public Class Fish
    Public Sub Swim()
        Debug.Print "This fish is swimming."
    End Sub
'End Class
--------------------------
' 子クラス(異なる親クラスの振る舞いを統一的に利用) '疑似的継承親別動作子共通動作
    ' 共通的な行動を実装
    Public Sub PerformAction(ByVal Animal As Object)
        ' 渡されたインスタンスの型に応じて動作を分岐
        If TypeOf Animal Is Bird Then
            Dim BirdAnimal As Bird
            Set BirdAnimal = Animal
            BirdAnimal.Fly
        ElseIf TypeOf Animal Is Fish Then
            Dim FishAnimal As Fish
            Set FishAnimal = Animal
            FishAnimal.Swim
        Else
            Debug.Print "Unknown animal type."
        End If
    End Sub
---------------------------

///////////////////////////
解説(3)と(4)
図で書くと、下記の感じ。



 

どちらも、子クラスで親クラスをインスタンス化しているので、子は親に依存している。

複雑になるが、当然(?)、親が複数で、子が複数の場合も考えられる・・・と思います。汗

 

///////////////////////////////

(5)'アダプター '(インターフェースなし)
====================================
Sub TestAdapterPatternWithoutInterface()
    ' インスタンスの作成
    Dim oldSys As New oldSystem
    Dim newSys As New NewSystem
    Dim adapter As New adapter

    ' OldSystemを直接利用
    oldSys.ShowMessageOld "Hello from OldSystem!"

    ' NewSystemを直接利用
    newSys.ShowMessageNew "Hello from NewSystem!"

    ' AdapterでOldSystemをラップ
    adapter.SetOldSystem oldSys
    adapter.ShowMessage "Hello via Adapter!"
End Sub

----------------------------
' Adapter: OldSystemをNewSystem風に動かすアダプター  'インターフェースなし
Option Explicit

Private oldSystem As oldSystem

' OldSystemのインスタンスをセット
Public Sub SetOldSystem(oldSys As oldSystem)
    Set oldSystem = oldSys
End Sub

' メッセージを表示(形式を変換)
Public Sub ShowMessage(Message As String)
    If Not oldSystem Is Nothing Then
        ' OldSystemのメソッドを呼び出し、メッセージを加工
        oldSystem.ShowMessageOld "[Adapted] " & Message
    Else
        Debug.Print "Adapter: No OldSystem instance set."
    End If
End Sub

-------------------------------
'NewSystem
Option Explicit

Private oldSystem As oldSystem

' OldSystemのインスタンスをセット
Public Sub SetOldSystem(oldSys As oldSystem)
    Set oldSystem = oldSys
End Sub

' メッセージを表示(形式を変換)
Public Sub ShowMessage(Message As String)
    If Not oldSystem Is Nothing Then
        ' OldSystemのメソッドを呼び出し、メッセージを加工
        oldSystem.ShowMessageOld "[Adapted] " & Message
    Else
        Debug.Print "Adapter: No OldSystem instance set."
    End If
End Sub

--------------------------
'oldSystem クラスモジュール(既存のシステム)


' OldSystem: 単純なメッセージ表示機能を持つクラス
Option Explicit

Public Sub ShowMessageOld(Message As String)
    Debug.Print "OldSystem: " & Message
End Sub

------------------------------
解説(5)
図にするとこんな感じかなと思う。

うまく言えないが、本当は、Adapterを上に書きたいが、上記の疑似的継承が、子クラスでインスタンス化していることを考慮すると、Adapterが下か??。

アダプターがoldsystemを内部でインスタンス
子クラスのAdapterで、oldsystemを加工
Adapterは、oldsystemに依存
NewSystemは全く無関係。

アダプターは、「後から追加が必要になった場合、(この場合は、oldssystemをnewsystem同様に使いたい)や、依存性を逆転したい場合に使うのだと思います。
このAdapterは、oldsystemに依存している。

 

///////////////////////////////////////////


(6)'アダプター '(インターフェースなし)
-----------------------------------
Sub TestAdapterPattern()   'アダプター+インターフェースの組合せ
    ' インスタンスの作成
    Dim oldSys As New OldSystem
    Dim newSys As New NewSystem
    Dim adapter As New adapter
    
    ' OldSystemを直接利用
    oldSys.IMessage_ShowMessage "Hello from OldSystem!"
    
    ' NewSystemを直接利用
    newSys.IMessage_ShowMessage "Hello from NewSystem!"
    
    ' AdapterでOldSystemをラップ
    adapter.SetOldSystem oldSys
    adapter.IMessage_ShowMessage "Hello via Adapter!"
End Sub

--------------------------------
' IMessage: メッセージを表示するインターフェース
Option Explicit

Public Sub ShowMessage(Message As String)
    ' 実装は各クラスで行う
End Sub

---------------------------------
' Adapter: OldSystemをNewSystem風に動かすアダプター
Option Explicit
Implements IMessage
Private OldSystem As OldSystem

Public Sub SetOldSystem(oldSys As OldSystem)
    Set OldSystem = oldSys
End Sub

 

Public Sub IMessage_ShowMessage(Message As String)
    ' OldSystemの機能をラップ
    If Not OldSystem Is Nothing Then
        OldSystem.IMessage_ShowMessage "[Adapted] " & Message
    End If
End Sub

----------------------------------
' NewSystem: メッセージをカッコ付きで表示するクラス
Option Explicit

Implements IMessage

Public Sub IMessage_ShowMessage(Message As String)
    Debug.Print "NewSystem: [" & Message & "]"
End Sub

---------------------------------
' OldSystem: 単純なメッセージ表示機能を持つクラス
Option Explicit

 

Public Sub IMessage_ShowMessage(Message As String)
    Debug.Print "OldSystem: " & Message
End Sub

---------------------------------
解説(5)
図にするとこんな感じかなと思う。
(インターフェース中心で書いています。)

このアダプター+インターフェースの方が見やすいのかな。
でも後から作るのは大変かな。。。汗
良く分かりません。汗

 

備忘録 アウトルックエクスポート・インポートメモ(不要なのか)IMAP

20250131備忘録メモ アウトルックエクスポート・インポートメモ(不要なのか)IMAP

 

 パソコン素人です。

 

アウトルックを使うことになり、従来のメールがきちんと移行されるのか分からないので、バックアップを取ろうと思った備忘録。(自分用メモ)
(でも、(多分)やらなくてもよかった話です。)


具体的には、アウトルックで、pstファイルとしてエクスポートできることを何となく知っていたので、アウトルック2016で、1個のフォルダをエクスポートした。

それを試しに、アウトルック2019にインポートしようとしたけれど、なぜか、うまく見れない。
うまくいかないことの備忘録。


状況:
①アウトルック2016から、USBメモリを使い、pstファイルとして、USBメモリに、エクスポート。
そこから直接、別の②PCのアウトルック2019にインポートしたが、見れない。
①と②は別のアカウントを使用しています。


直し方(正しい?方法):
そのUSBメモリのpstファイルを、「デスクトップ」「ドキュメント」「Outlook ファイル」にコピーして、そこから、
他のアカウントでログインしたアウトルック2019に、インポートしました。
アウトルック2019で、表示変更でIMAPメッセージに変更すれば、閲覧が可能になりました。

 


上記の件について、知っている人がいたら、バカだなと思うでしょうね。
このメールは、imapを使っているので、同じサーバー、同じアカウントを使用するなら、バックアップは不要だと。


IMAPは、メールクライアントがサーバーに接続し、メールボックス内のメッセージをリアルタイムで同期する方法で動作します。
つまり、複数のデバイスでも、同じものを閲覧が可能と思います。

今回、別のアカウントだったので、エクスポートしましたが、
本当は、同じアカウントなら、IMAPなら同期するので、他のPCからでも、何もしなくても閲覧可能。


でも、何のためにpstファイルがあるかというと、バックアップを取る場合や、別のアカウントのアウトルックで見るためのようです。


上記の場合もしも、別サーバーで、別アカウントで、過去のメールを今まで見たい場合、今のサーバーにメールを上げて同期させる必要がありそうですが、
表示変更でIMAPメッセージに変更で見れれば十分かなと思います。


注意は、バックアップの期間です。
chatGPT様(多分4o)
「アカウント設定」→「アカウント設定(A)」をクリック
「電子メール」タブで、対象のIMAPアカウントを選択し、「変更(C)」をクリック
「メールの設定」画面が開くので、「オフライン設定」の項目を確認
「〇〇か月間のメールを保持する」 というスライダーがある(デフォルトでは12か月)
スライダーを動かして「すべて」に変更(または適切な期間を設定)
とのことでしたが、
アウトルック2019では、
「変更(C)」はなかったのですが、変更(A)を開くと、POPとIMAPのアカウント設定で、
「オフラインにしておくメール:」があり「スライダー」が「すべて」になっていたので、当該フォルダの過去メール全部取れました。


余談:
昔、あるメーラーのメールのバックアップを教えてもらったことがあります。
今でもよく分かっていないのですが、当時のメーラーのサーバーに限度があり、それから漏れてしまうメールをどうバックアップするかということでした。

おそらくメーラー本体AとアウトルックBをつないで、アウトルックBでメーラーAのIMAPフォルダーを見られるようにして、
アウトルックBで新しいアイテム その他のアイテム「デスクトップ」「ドキュメント」「Outlook ファイル」にファイルを作って、
そこに、ドラッグ&ドロップでローカルに落としていった。(戻したければ戻すとメーラーAのサーバーと同期する)
なんか、今頃になって理解が進んだ気がする。多分10年以上前の話です。感謝。感謝。