No Programming, No Life

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

SQL Server 2017のIntegration Services(SSIS)に、SQL Server Management Studio(v18.4)から接続できなかった話

SQL ServerSSIS環境を構築してテストする必要があり、ローカル環境にSQL Server 2017のデータベースとIntegration Services(SSIS)、それからSQL Server Management Studio(SSMS)をインストールしてテストしていた時の話。めちゃめちゃニッチだが誰かの役に立つかもしれないのでメモとして残しておく。

Integration Servicesに接続できない

SQL ServerとSSMSのインストールは正常終了。だけど、以下のようなエラーが発生し接続できなかった。

f:id:fumokmm:20191201231539j:plain
IntegrationServicesに接続
f:id:fumokmm:20191201231710j:plain
接続エラー

バージョンを揃えたらエラー内容が変わった

こちらによると、

SQL Server Integration Services (SSIS) - SSMS バージョン 17.x 以降では、レガシ SQL Server Integration Services サービスへの接続はサポートされません。 以前のバージョンのレガシ Integration Services に接続するには、SQL Server のバージョンに対応する SSMS のバージョンを使用します。 たとえば、レガシ SQL Server 2016 Integration Services サービスに接続する場合は、SSMS 16.x を使用します。

SQL Serverの方と、SSMSの方のバージョンを合わせておく必要があることが分かった。 SQL Serverの方はバージョン2017なので、それに合わせて、SSMSもv17.9.1をインストール。 その後、v17.9.1のSSMSから接続を試みてみたら、エラーメッセージが変わった。おお、少し希望の光が見えてきた。

f:id:fumokmm:20191201232411j:plain
エラーメッセージが変わった、少し希望が見えた

管理者権限で実行

こちらによると、管理者権限で実行してみるといいらしい。 ということで、管理者権限でSSMS自体を起動したらめでたく接続できました。良かったー。

f:id:fumokmm:20191201232959p:plain
SSMSを管理者権限で実行(右クリック→その他→管理者として実行)

f:id:fumokmm:20191201233231j:plain
接続できた!

それにしてもツールの上位互換を切り捨てているなんてMicrosoftさんらしくないな。最近はそうでもないのかな?分らんけど。

おわり。

参考

SQL Server Management Studio (SSMS) のダウンロード - SQL Server | Microsoft Docs

SSISに接続できない

ThunderbirdのProfilesをシンボリックリンクで別フォルダに指定

f:id:fumokmm:20191218005420p:plain

Thunderbirdの1アカウント、1プロファイルという設定ファイルで管理されているみたい。 各プロファイルはデフォルトで以下フォルダのProfilesフォルダに配置されている。 環境はWindows10です。

C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird\Profiles

Profilesフォルダの下には、各メールプロファイルのフォルダが入るようになっている。 ちょっとCドライブに置かれると容量の問題などで困るため、 Profilesフォルダごと実態をOneDrive管理のフォルダの方に作っておいて、 そちらにProfilesのシンボリックリンクを張ることにした。 (ちなみに、各Profileがどこにあるかは、上記Thunderbirdフォルダのprofiles.iniにて管理されている。今回は内容は割愛)

シンボリック作成コマンド(PowerShell)は以下のような感じ(管理者で実行)

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\Windows\system32> cd C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird
PS C:\Users\<ユーザー名>\AppData\Roaming\Thunderbird> New-Item -Path . -Name Profiles -ItemType SymbolicLink -Value "<Path to OneDrive>\Profiles"

    ディレクトリ: C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----l       2019/12/01     14:36                Profiles


PS C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird>

できあがり f:id:fumokmm:20191201144148p:plain

これでメールデータ自体はクラウドでもバックアップされるし将来の移行も簡単になる。

参考

Thunderbirdのメールやプロファイルの保存場所の変更方法

Thunderbird のデータを新しいコンピューターに移動する | Thunderbird ヘルプ

複数のプロファイルを使用する | Thunderbird ヘルプ

Windowsでもシンボリックリンクが使える話

f:id:fumokmm:20191121224631p:plain

(illust by いらすとや)

実は

WIndows7のころから、実はWindowsでもシンボリックリンクが使えるようになっていた。現場ではあまり実用されているところにお目にかかったことがないのだが、色んなフォルダから同じファイルをツツきたいなと思い、ふとWindowsでもそういえばシンボリックリンクが使えるんじゃなかったっけ?と思い出した次第。

MKLINKコマンド

早速ですが構文を示す。こちらを参考。

mklink [[/d] | [/h] | [/j]] <Link> <Target>

このメイクリンク(と読むのかな?)コマンドはシンボリックリンクハードリンク、あとジャンクションが作成できる。ん?ジャンクションって何だ?詳しい説明は参考にしたサイトを見てほしい。簡単に言うと、シンボリックリンクと同じようなものだ。 ハードリンクはまぁちょっと考え方が違うので、また別の機会に記事にでもするとして、今回はシンボリックのお話。

ファイルのシンボリックリンク

mklink <シンボリックリンク名> <ファイルへのパス>

ファイルの場合はオプション要らない。

フォルダのシンボリックリンク

mklink /d <シンボリックリンク名> <ファイルへのパス>

ディレクトリの場合は/dオプションを付ける。

なお、ファイルへのパスは相対参照でも絶対参照でもいけるみたい。

例 (Win10で試したところ)

以下は、現在のバージョンのJDKのフォルダを指すシンボリックリンクC:\tempに作成する例だ。C:\tempに移動してから以下のようにする。

mklink /d java-currentver "C:\Program Files\Java\jdk-13.0.1"

なお、コマンドプロンプトは管理者権限で実行する必要がある。Win + Rcmdと打って、Ctrl + Shift + Enterで管理者権限でコマンドプロンプトが立ち上がる。

f:id:fumokmm:20191121232659p:plain

出来上がったシンボリックリンクを見た目はショートカットと同じ f:id:fumokmm:20191121232703p:plain

中に入ってみると、tempの下にjava-currentverがあるように見える。 f:id:fumokmm:20191121232704p:plain

参考にしたサイト

docs.microsoft.com

dev.classmethod.jp

www.atmarkit.co.jp

qiita.com

IT用語斜め読み - サプスクリプション

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

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

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

1位 JavaBeans 2位 インフラ 3位 サインイン 4位 ディスパッチ 5位 Web 6位 API 7位 Apache 8位 サブスクリプション 8位 ツール 10位 ステアリングコミッティ 10位 HD 10位 モダナイゼーション

となっていました。今回はこの中で気になった8位のサプスクリプションについてです。  

サプスクリプションって何?

最近お仕事でMicrosoft Officeが必要になったため、Office365 for Businessを購入しました。その際にもサプスクリプションという単語が出てきて良く分からないなぁと思っていました。

サブスクリプション 【subscription】 別名: サブスクライブsubscribe サブスクリプションとは、予約購読、購読料、会費、寄付(金)、出資(金)、応募、申込、加入、署名、承諾などの意味を持つ英単語。雑誌などの定期購読といった意味があり、ITの分野ではこの意味を元に、会員制のサービスへの加入や、定期的に利用権を更新するソフトウェアの販売方式などを指すことが多い。

IT用語辞典 e-Words より 

なるほど、定期購読ね。製品を一括で購入するのではなく、月々など、定期的に支払いをすることで、そのソフトウェアの使用権を得る感じですね。Kindle Unlimitedとか、Apple Musicとかもこのスタイルですね。

今回のOffice365に関して言えば、常に更新が入って最新版のOffice環境が手に入り、月々1,000円程度といった感じです。買い切りよりも良いんじゃないかな?と個人的には思います。

ビジネスモデル

今後のアプリケーションのビジネスモデル的に見ても、このサプスクリプションの流れが主流になってきているのではないかな?思います。 今は誰でもがスマートフォンを持っ時代ですし、昔のように、固定端末で一度最初にインストールしたアプリをずっと固定で使い続けるという機会も減ってゆくと思います。 かわりにサプスクリプションで月額料料金を支払って、最新版アプリをどこの環境でも利用できる、そんな感じの世の中になってきていますね。

おわりに

私も、長らく使い続けてもらえるような素敵なアプリを作っていけたらなと思います。

ExcelのHYPERLINK関数で同一ブック内の別シートにリンクしたい場合は # を付けるといいみたい

f:id:fumokmm:20191116175057j:plain ( photo by ぱくたそ )

Excelの同一ブック内でセルにハイパーリンクをはってシート間をジャンプさせたいことがある。普通だとハイパーリンクの挿入(Ctrl + K)とかで挿入すると思うが、標準のHYPERLINK関数でも実現できる。

HYPERLINK関数

HYPERLINK(リンク先, [別名])

さて、同一ブック内で別シートにリンクをはりたい場合についてですが、マイクロソフトのヘルプを見ると、こんな感じになっている。

サーバー内のフルパス

=HYPERLINK("\\FINANCE\Statements\1stqtr.xlsx", D5)

ローカルPCのフルパス

=HYPERLINK("D:\FINANCE\1stqtr.xlsx", H10)

ブック名とシート名のフルパス

=HYPERLINK("[Book1.xlsx]Sheet1!A10","Go to Sheet1 > A10")
  または
=HYPERLINK(CELL("address",Sheet1!A10),"Go to Sheet1 > A10")

などが書いてあるんだけど、いちいちファイル名(ブック名)まで指定するのは大変だし、リネームされる可能性もあるので埋め込みたくない。そんな時のためにCELL関数を使ったら?ということみたいなんだけど、ファイル名(ブック名)にリンクが使えなくなる文字とかもあったはずで、とても困ることになる。

f:id:fumokmm:20191116183745p:plain

こんな感じでリンクが使えないことがある!

解決方法

リンク先文字列の頭に # をつけるといいみたいです。こんな感じ。

同一ブック内の別シート

=HYPERLINK("#Menu!A1", "Go to menu")

同一ブック内の同一シートの別セル

=HYPERLINK("#A1", "Go to A1")

この # をつける方法はこちらで知ったのですが、マイクロソフトのヘルプにも書いてないんだよなぁ。どうなってるんだ。

参考

HYPERLINK 関数 - Office サポート

Excel(エクセル)基本講座:HYPERLINK関数の使い方

HYPERLINK関数で、同じブック内のシートにハイパーリンク:Excel(エクセル)の関数・数式の使い方/検索・行列

PowerShellについて誤解していたこと

f:id:fumokmm:20191115084638p:plain

PowerShell使ってますか?当記事ではPowerShellについて誤解していたことを書きたいと思います。

目次

PowerShellとの再会

最近、お仕事でWindows系サーバーの移行などやることになったのですが、その際に今までよりもWindowsと仲良くしないといけなくなりました。そんな中で再会したのがPowerShellです。

PowerShellコマンドプロンプトの後継として結構昔からあって、存在は勿論知っていたんですが、Windowsは長らくbatファイルしか扱えないし、大したこともできないんだわ、は~Bashが使いたいなぁ~と、それこそ食わず嫌いのように過ごしてきました。しかし、今回のお仕事で軽くPowerShellスクリプトを組むことになりそうで、PowerShellに遅ればせながら入門する形となったわけです。

PowerShellの何が良いか

一言で言うなら、バッチ(bat)で出来ないあれやこれやが簡単にできることです。例えば、Windows PCしかない環境でファイルのハッシュ値を知りたいな♪ となった場合、どうしますか?お好みのスクリプト言語をインストールしますか?場合によってはインストール禁止の現場もありますよね。そんな時、PowerShellなら簡単に実現できるんです(以下)

PS C:\temp> Get-FileHash .\test.txt

Algorithm Hash Path
--------- ---- ----
SHA256 43940E53EB7D524938CE68BE5446BB68BBB87095125878D33979A83637DC261A C:\temp\test.txt


PS C:\temp> Get-FileHash -Algorithm MD5 .\test.txt

Algorithm Hash Path
--------- ---- ----
MD5 7AD3ADF4EB7E0E46BE649DB2752F3CF0 C:\temp\test.txt

PowerShellスクリプト

PowerShellスクリプトとして保存しておいて(拡張子は.ps1)使うとさらに便利です。なぜなら、変数が使えたり、if-elseやswitch、foreachなどの構文も使えたりするからです。また、PowerShell ISEという専用のIDEも標準でWindowsに付属しており、これを使ってスクリプトコードの編集、コーディング中はコード補完もあるし、スクリプトの実行やデバッグ実行なども出来たりするのです。結構すごいなと思います。

なぜバッチファイルは不便なままなのか

Windows10になってもバッチ(bat)の言語仕様は強化されないしずっと昔のまま使いづらいなぁ…と思っていましたが、PowerShellはその間もずっとバージョンアップが続けられてきていたようでした。つまりバッチはもうシェルとしては打ち止めで、これからのシェルとしてはPowerShellに全力を注ぎますよと、そんなマイクロソフトの意気込みが感じられます。

PowerShellが初見さんに敬遠される理由

私も含めですが、あまりWindowsユーザに広く浸透しているとは思えないPowerShell、そんなPowerShellが初見さんに敬遠される理由の一つに、コマンドが長くて打つのが面倒!新しく覚えるのが面倒!というのがあると思います。

たとえばディレクトリを変更するコマンド(いわゆるcd)は・・・

PS C:\> Set-Location "C:\temp"
PS C:\temp>                  

ただし、ここらへんはトレードオフな気がします。古きを捨て新しいものを作るには勇気や思い切りがいるものです。そういった意味でPowerShellの取った方針は英断だったと私は思います。短い変数名や関数名が好まれて使われるC言語から、意味が明確になるなら長いクラス名やメソッド名を歓迎するオブジェクト指向の世界へシフトしたような感覚です。 ちなみに、PowerShellにはalias機能があって、良く使う慣習的なコマンドはデフォルトでaliasが割り当てられています。たとえばcdとかdirとかlsとか。ただしこれもやり過ぎには注意が必要なのではないでしょうか。何でもLinuxコマンドに倣うのではなくて、alias機能は過去の慣習への互換性のために使うのがよいと思います。上記のSet-Locationなどはそれこそcdで良いかなと。

おわりに

まぁそんなわけで、バッチ(bat)ファイルの黒魔術に絡めとられて現場でお困りの皆さんがおられましたら、ちょっと手を止めて、黒いウインドウを閉じて、少し群青色がかったウインドウを開いてみるのはいかがでしょうか。

参考

PowerShell - Wikipedia

PowerShell/PowerShellでファイルのハッシュ値を確認する方法・Get-FileHash - Windowsと暮らす

ロマサガ3 リマスター版にGradleが使われていた

2019年11月11日にオリジナル版から実に24年の時を経て、ロマンシング サガ3のリマスター版が発売されました。今回は8つのプラットフォームで発売されました。私はiOS版を早速購入しました。

f:id:fumokmm:20191113213353p:image

さて、タイトルを眺めていたら、右上に「ライセンス」とあったので、何気なくタップ。すると「ライセンス」のテキストが出てきて、

f:id:fumokmm:20191113202324p:image

なんとGradleが入ってる!

なんというか、当時スーファミ版が開発されていた時には勿論使われていなかった技術でしょうし、というか存在すらしていなかった技術でしょうが、それが今改めて開発するときには使われるというのは、何か感慨深いものがあります。

それから、自分が普段から使っているのと同じビルドシステムを使ってこういった巨大なゲームプログラムも開発されるんだなぁという点にがとても興味深い。万物はクォークから出来ている、ってのと同じようなインパクトが私にはありました。(ロマサガ3もGradleでビルドされている)

世界は広いようで狭いですね。