書けたら書く

主にCorporate ITについて書けたら書く

Ubuntu 20.04 LTSでMacキーボード(US)を使う準備

MacではKarabiner使って、左commandキーで英語入力に切り替わり、右commandキーを押すと日本語入力に切り替わるようにしています。 REALFORCE for MacUbuntu端末でも使いたいので、同じ状態を目指します。

…目指したのですが、残念ながら実現できたのは「command押下で入力ソースOn/Off」まででした。しかも、左commandはアクティビティが起動してしまうので、実質右commandでの切り替えのみという。正解を知りたい。

fcitxインストール

  1. 「fcitx」というインプットメソッドフレームワークをインストールします。
    ターミナルで sudo apt-get install fcitx fcitx-mozc を実行します。

入力メソッドをfcitxに変更

  1. 設定 > 地域と言語 > インストールされている言語の管理 を開きます。
    f:id:y__ueda:20200724232439p:plain
  2. キーボード入力に使うIMシステムを「fcitx」に設定します。
    f:id:y__ueda:20200724232528p:plain

fcitxの設定変更

  1. アプリ一覧から「fctix設定」を起動します。
  2. 入力メソッドタブの画面左下にある + をクリックします。
  3. 「現在の言語のみ表示」のチェックを外し、「mozc」と検索します。
    ※ もし入力メソッドが何も表示されない場合は、OS再起動してみてください。
    f:id:y__ueda:20200724232653p:plain
  4. 入力メソッドタブの画面でmozcをダブルクリックします。
    キーボードレイアウトを「英語(US)」に変更します。
    f:id:y__ueda:20200724232722p:plain
  5. 入力メソッドタブの画面左下にあるキーボードアイコンをクリックします。 既定のキーボードレイアウトを「英語(US)」に変更します。
    f:id:y__ueda:20200724232803p:plain
  6. 全体の設定タブで画面で入力メソッドのオンオフを設定します。
    ※ 左右Superキー(= commandキー)を設定していますが、左Superはアクティビティが起動してしまうので、実質右Superでの切り替えのみという…
    f:id:y__ueda:20200724232836p:plain
  7. 以上です!

Linux Mint 19.3の初期設定

f:id:y__ueda:20200216234430p:plain 随時更新します。

環境

Linux Mint 19.3 Tricia - Cinnamon (64bit)

1. リポジトリを日本サーバーに設定

デフォルトだとアメリカになっているので、日本に変更します。
『ミントメニュー → システム管理 → ソフトウェアソース → 公式リポジトリタブ』
画像の通りではなく、速度順で選べばOKです。
f:id:y__ueda:20200216230919p:plain

2. パッケージの更新

まずはすべてのパッケージを更新しておきます。Terminalから以下を実行します。

sudo apt update && sudo apt upgrade

3. Firefox検索エンジンGoogleに変更

『設定 → 検索タブ』の最下部にある他の検索エンジンを追加をクリックします。すると「Search engines in Linux Mint」というサイトに遷移します。
f:id:y__ueda:20200216232538p:plain

ページの下の方にある「OTHER ENGINES」内のGoogleアイコンをクリックします。
f:id:y__ueda:20200216232557p:plain

「Click here to add Google to your search engines.」のhereをクリックします。
f:id:y__ueda:20200216233021p:plain

追加をクリックします。
f:id:y__ueda:20200216233341p:plain

Googleが追加されたことを確認します。
f:id:y__ueda:20200216233647p:plain

「既定の検索エンジン」をGoogleに変更します。 f:id:y__ueda:20200216233731p:plain

Windows 10のプロダクトキーの確認方法

コマンドで確認

コマンドプロンプト

コマンドプロンプトを起動し、以下のコマンドを実行します。

wmic path SoftwareLicensingService get OA3xOriginalProductKey

OA3xOriginalProductKeyの下に表示される5桁×5の文字列がプロダクトキーです。

PowerShell

PowerShellを起動し、以下のコマンドを実行します。

 (Get-WmiObject -query "select * from SoftwareLicensingService").OA3xOriginalProductKey

コマンドの次の行に表示される5桁×5の文字列がプロダクトキーです。

コマンドで確認できなかった場合

コマンドではプロダクトキーを確認できない場合があります。例えば、Windows 7から無償アップデートした場合、コマンド実行してもプロダクトキーは表示されません。
この場合は次の2つのいずれかの方法で確認できます。

Microsoftのコミュニティで公開されているvbs

answers.microsoft.com

KeyFinder

KeyFinderからZIPファイルをダウンロードし、展開後にkeyfinder.exeを実行します。
出力結果欄のCD Keyがプロダクトキーです。Product IDではありません(OSインストール時に使いません)。

Azure ADの特定のセキュリティグループに含まれるユーザー一覧をPowerShellで取得する

Windows 10を利用していることを前提に記載します。

まずはじめに、PowerShellを「管理者として実行する」で起動します。
次に、必要なモジュールをインストールします。

Install-Module -Name AzureAD

モジュールのインストールは一度行えばOKです。

ここまでの準備ができたら、以下を記載した.ps1ファイルを実行します。問題なく実行されると、対象のセキュリティグループに含まれるユーザー一覧(csv)がデスクトップに生成されます。

$Credential = Get-Credential
Connect-AzureAD -Credential $Credential

$groupname = Read-Host "セキュリティグループ名を入力してください"
$group = Get-AzureADGroup -Filter "DisplayName eq '$groupname'"
$userlist = Get-AzureADGroupMember -ALL 1 -ObjectId $group.ObjectId
$userlist | Select-Object -Property UserPrincipalName,Mail,DisplayName | Export-Csv -Encoding UTF8 -Path $HOME\Desktop\userlist_$groupname.csv

いくつかポイントを記載しておきます。

$Credential = Get-Credential
Connect-AzureAD -Credential $Credential

この部分を実行すると、サインイン画面が起動しますので、Office 365職場または学校のアカウント の資格情報を入力します。

$groupname = Read-Host "セキュリティグループ名を入力してください"

今回はユーザーがセキュリティグループ名を入力する形にしました。なお、セキュリティグループ名の入力に大文字小文字の区別はありません。

$userlist = Get-AzureADGroupMember -ALL 1 -ObjectId $group.ObjectId

デフォルトでは最大100件までの情報しか取得できません。
-ALL 1 を追加することで全件取得できます。なお、1true に置き換えても構いません。

Export-Csv -Encoding UTF8 -Path $HOME\Desktop\userlist_$groupname.csv

私が使用するエディターがVS Codeなので、UTF-8エンコードしています。SJISでexportする場合は default と置き換えてください。

PowerShellのExecution Policy設定

PowerShellスクリプトを実行すると以下のようなエラーが表示される場合があります。

.\hogehoge.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\hogehoge.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/
?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\hogehoge.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

.ps1ファイルの実行は、PowerShellの「実行ポリシー (Execution Policy)」で制御されています。上記のエラーは実行ポリシーが適切でないために表示されます。

現在のExecution Policyは以下のコマンドレットを実行すると確認できます。

PS C:\> Get-ExecutionPolicy
Restricted

ポリシーにはいくつか種類があります。詳しくはMicrosoft公式を参照してください。

今回は RemoteSigned に変更します(PowerShellスクリプトの実行時に引数として Execution Policy を指定する方法もありますが、面倒なので…)
そうすることで以下の状態となります。

  • ローカルに保存されているスクリプトが実行可能となる。
  • インターネットからダウンロードしたスクリプトは、署名されているもののみが実行可能となる。

PowerShellを「管理者として実行」し、以下の通りにコマンドレットを実行します。

PS C:\> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): 

Slack - 共有チャンネル (Shared Channel) の仕様まとめ

共有チャンネルの仕様、あまり知られていないものを中心にまとめておきます。
共有チャンネルの作成方法など基礎部分はSlack公式ページを参照してください。 なお、2020/2/3現在の仕様です。

共有チャンネルを作成する

チャンネル設定は同期しない

チャンネル名称、チャンネルのトピック (Topic) や説明 (Description) はワークスペース間で同期しません。両方のワークスペースでそれぞれ設定する必要があります。

共有される側のパブリック / プライベートを指定できない

共有チャンネルの承諾依頼を、共有される側のワークスペース管理者が承諾する際にパブリック / プライベートを選択します。共有する側は指定できません。

共有される側に同名チャンネルが存在する場合はリネームされる

共有される側に同名チャンネルが存在する場合、既定ではチャンネル名の後ろに4桁数字が付与されます。共有されるワークスペースの管理者が変更可能です。

共有チャンネルの利用する

カスタム絵文字の表示に制約がある

メッセージに含まれるカスタム絵文字は、共有先では表示されない場合があります。同じ名前やエイリアスで登録されたカスタム絵文字が共有先に存在する場合、共有先のユーザーには、共有先のカスタム絵文字に置き換えて表示されます。存在しない場合、名前やエイリアスのみが表示されます ( :hogehoge: のように表示)
カスタム絵文字でリアクションした場合は、双方のワークスペースで同じカスタム絵文字が表示されます。

ユーザーを招待する / 退出させる

共有チャンネルには、同じワークスペースのユーザーを招待できます。例えば、ワークスペース Aのユーザーは、ワークスペース Aのユーザーだけを共有チャンネルに招待でき、ワークスペース Bのユーザーは招待できません。また、退出させる場合も同様です。

共有先のユーザーのプロフィールはほぼ閲覧できない

共有先のワークスペースのユーザーのプロフィール情報はほぼ閲覧できません (表示されるのは 氏名・表示名・現地時間 程度) 。

共有チャンネル以外のチャンネル名はメッセージで送る

共有チャンネル以外のチャンネル名は、共有先のユーザーから見るとマスクされます (マウスオーバーすると「プライベートチャンネルの情報 (Private Channel info) 」と表示)

グループをメンションする

グループは、それを作成したワークスペース側のユーザーだけがメンションできます。例えばワークスペース Aでグループを作成した場合、ワークスペース Bのユーザーからはそのグループをメンションできません。
また、ワークスペース Aのユーザーがグループをメンションした場合、ワークスペース Bのユーザーから見るとマスクされます (マウスオーバーすると「非公開ユーザーグループ情報 (Private user group info) 」と表示) 。

グループを編集する

グループに追加や削除ができるのは、グループを作成したワークスペース側のユーザーのみです。

DM / グループDMを送る

同じ共有チャンネルに参加しているユーザー同士であれば、DMやグループDMも可能です。

Appを利用する

共有チャンネルに設定されたAppは、ワークスペースに関わらず、そのチャンネルに参加しているすべてのユーザーが利用可能です。

共有を停止する

再度の共有はできない

一度共有を停止したチャンネルは、二度と共有できません (停止前に共有していたワークスペースであっても) 。

共有されたワークスペース側はアーカイブされる

共有を停止すると、共有されていた側のワークスペースではチャンネルが自動的にアーカイブされます。また、復元することができません。
共有していた側は、引き続きそのチャンネルを利用できます。

カスタム絵文字の表示が崩れる

共有したワークスペースに残ったチャンネル、あるいは共有されたワークスペースアーカイブされたチャンネルでは、各ワークスペースに存在しないカスタム絵文字の表示が崩れます。具体的には :hogehoge: のような名前に変換されます。

共有停止後もDM / グループDMを送る

共有を停止後も、ワークスペースを跨いで引き続き互いにDMをやり取りできます (共有チャンネル停止時のメッセージ表示より)

Ruby on Rails - MVCモデル1分概要

何度も忘れるのでメモ置いておきます。

Ruby on RailsMVCモデル

Ruby on RailsMVCと呼ばれるアーキテクチャーを採用している。

  • M:Model(モデル)
  • V:View(ビュー)
  • C:Controller(コントローラー)

Model

  • データベースの操作(CRUDアクション)を担う。
  • 1つのテーブルに対し、1つのModelが対応する。
  • Controllerからデータの追加や変更・削除の指示を受け実行する。
  • データベースのテーブルはモデルクラスと、モデルクラスから生成されたインスタンスによって作成される。
  • OR Mapperにより、直接SQL文を書く代わりに非常に短いコードでデータベースの操作を行える。

View

  • ユーザーが見るためのHTMLを組み立てる。
  • ERB(Embedded Ruby)テンプレートを使い、HTMLにRubyスクリプトを埋め込む。

Controller

  • ユーザーからの操作要求を受け取り、ModelやViewに指示を出す。
  • Controllerが複数存在する場合、適したものを"ルーティング"が選択する。
  • Controllerの中のメソッドを"アクション"と呼ぶ。以下の7つが基本となる。
アクション名 役割
index リソースの一覧を表示する
show リソースの詳細を表示する
new リソースを新規作成する
create リソースを新規作成して追加(保存)する
edit リソースの編集画面を表示する
update リソースを更新する
destroy リソースを削除する