ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【GAS/Googleスプレッドシート】ファイル自身が格納されているフォルダの取得方法

 スプレッドシートと同じGoogleドライブのフォルダ内にファイルを作りたい時などがあるかと思います。

 そのためにはファイルがどのフォルダにあるかを取得する必要があります。

 参考資料のページそのままですが今回はその備忘録です。


 では始めます。


・ファイル自身が格納されているフォルダ取得方法
 結論から言うと以下の方法で取得できます。

function myFunction() {
  // 自身のスプレッドシートのIDを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  
  // 親フォルダ(ファイル自身が格納されているフォルダ)を取得
  var parentFolder = DriveApp.getFileById(ssId).getParents();
  var folder = parentFolder.next();

  // フォルダ名を表示
  SpreadsheetApp.getUi().alert(folder.getName());
}

「DriveApp.getFileById(ssId).getParents();」のところで親フォルダのイテレータ(FolderIterator)を取得しています。

 これは何かというと、Googleドライブでファイルを選択したときに画面右側に出てくる「パス」に記載されているフォルダです。
f:id:rikoubou:20191205163952p:plain

(※ちなみに普通に使っていればここには1つのフォルダしか表示されませんが、Googleドライブ上でファイルを選択した状態で「Shift+Zキー」を押すと追加できます)

 親フォルダのイテレータが取得できたら「var folder = parentFolder.next();」で親フォルダを取得できます。

 複数ある場合はnext()をループさせて該当のフォルダ名が一致したものを取得すればよいかと思います。


 以上がファイル自身が格納されているフォルダの取得方法です。

 ソースコード的には単純ですが、知らないとできないことだ思ったので記事にした次第です。


・参考資料

【Googleスプレッドシート】IMPORTXML関数を使ったWebスクレイピング

 Webページから特定のものを抜き出すいわゆるWebスクレイピングが簡単にできないかと思って調べてみたところ、GoogleスプレッドシートのIMPORTXML関数を使えば簡単に抜き出せるとわかったのでその使い方の備忘録になります。

 参考資料に公式のドキュメントとより詳しい解説をしているページ様を掲載していますので、気になる方は参照をお願いします。

 では始めます。


1:IMPORTXML関数について
 公式ドキュメントにあるように、構文は以下のようになっています。

IMPORTXML(URL, XPathクエリ)

 第一引数は対象のWebページのURL、第二引数はXPathクエリを設定します。

 XPathについてはこちらのページに詳しく書かれています。簡単に言うとWebページのhtmlタグの構造をパスの形で表したようなものです。

 では実際にこの関数を使って抜き出してみます。


2:IMPORTXML関数を実際に使ってみる
 実際の例として、今回は以下のようにIMPORTXML関数のドキュメントページ右側にある赤枠で囲ったリスト部分の文字列を抜き出してみます。
f:id:rikoubou:20191119144518p:plain

 またブラウザはchromeという前提で進めます。

 最初にIMPORTXML関数のドキュメントページを開きます。

「F12」キーを押してデベロッパーツール画面を開きます。
f:id:rikoubou:20191119145002p:plain

 デベロッパーツールの左上にある四角と矢印のマークの部分を左クリックします。
f:id:rikoubou:20191119145227p:plain

 その状態でWebページ上にマウスカーソルを動かすと表示させているタグ部分が色分けされます。
f:id:rikoubou:20191119145422g:plain

 ひとまずページの左上にある「ドキュメントエディタヘルプ」というところにカーソルを合わせると、以下のようになりデベロッパーツール画面に該当箇所の記述部分が色付きで表示されます。
f:id:rikoubou:20191119152241p:plain

 該当箇所(ここでは「ドキュメントエディタヘルプ」の文字部分)を左クリックをすると色付きの記述部分が固定されます。
f:id:rikoubou:20191119152317p:plain

 デベロッパーツールの色のついた部分にマウスカーソルを合わせて右クリックし、出てきたメニューの「Copy」→「Copy XPath」を選択します。
f:id:rikoubou:20191119152458p:plain

 これでXPathがコピーできました。実際にコピーできた内容は「//*[@id="material-bar-custom-product-name"]/a」です。

 XPathがコピーできたのでスプレッドシートを開いて以下のように関数を入力します(「"」の部分は関数の文字列部分と混同するので「'」に変更してあります)。

IMPORTXML("https://support.google.com/docs/answer/3093342?hl=ja", "//*[@id='material-bar-custom-product-name']/a")

 実際に入力してみると、以下のように少しロード時間があった後に「ドキュメントエディタヘルプ」の文字列部分がセルに反映されます。
f:id:rikoubou:20191119153000p:plain

 ただしこのデベロッパーツールのXPathコピーではうまく抜き出せない場合があります。その場合はソースコードからうまく抜き出せるようなXPathを自分で記述する必要があります。

 当初やりたかったリスト部分の抜き出しは以下のようになります。

IMPORTXML("https://support.google.com/docs/answer/3093342?hl=ja", "//a[@class='sibling-link']")

 実際に抜き出すと以下のように各項目が抜き出せます。
f:id:rikoubou:20191119154213p:plain
 
 
 以上がGoogleスプレッドシートのIMPORTXML関数を使ってWebスクレイピングする方法です。

 Webスクレイピングするツールは色々ありますが、Googleスプレッドシートの関数を使って簡単にできるのでちょっとした部分の抜き出しをやるならかなり便利だと思います。


・参考資料

【Blender】Blender2.81、Blender2.82のダウンロード方法

 今まで知らなかったのですがBlender2.81のβ版とBlender2.82のα版がもうダウンロードできるようになっています。

 正式リリースされたものではないので使う場合は自己責任になりますが、新たな機能も追加されています。

 これらのダウンロード方法を自分用のメモとして残しておきます。


・公式ページからのダウンロード方法
 まずBlenderの公式ページを開きます。

「Download」をクリックします。
f:id:rikoubou:20191112135058p:plain

 Downloadページをスクロールさせた先にある「Release Notes」をクリックします。
f:id:rikoubou:20191112135317p:plain

 Release Notesページの「2.81」をクリックします。
f:id:rikoubou:20191112135416p:plain

 2.81ページをスクロールさせた先にある「Try Blender 2.81 Alpha」ボタンをクリックします。
f:id:rikoubou:20191112135627p:plain

 これでダウンロードページが表示されるので、OSとバージョンを選んでダウンロードすることができます。
f:id:rikoubou:20191112135723p:plain


 ダウンロードページの直接リンクを貼るでもよかったのですが、公式ページから辿る備忘録ということで…。

【Windows】Windows10にffmpegをインストールする

 ffmpegを使ったことがなかったので、今回はWindows10にffmpegの環境構築をやっていきます。

 では始めます。


1:ffmpegをダウンロードする
ffmpeg.org

 公式ページにアクセスして「Download」ボタンをクリックします。
f:id:rikoubou:20191107135359p:plain

 画面左下にあるOS選択画面からWindowsを選択します。
f:id:rikoubou:20191107135609p:plain

Windows EXE Files」という項目が表示されるのでクリックします。
f:id:rikoubou:20191107135813p:plain

 広告が色々出てくるダウンロード画面が表示されますが、必要なのは赤枠部分だけです。
f:id:rikoubou:20191107140203p:plain

 Versionは、上が最新版、下が安定版です。
 Architectureは、32bitか64bitを選択します。
 Linkingは、Staticで良いと思います。

 今回は以下のように「安定版64bitのStatic」にして「Download Build」ボタンをクリックしてダウンロードします。
f:id:rikoubou:20191107140423p:plain

 これでzipファイルがダウンロードされます。


2:zipファイルを解凍して環境変数にパスを通す
 ダウンロードしたzipファイルを解凍します。

 解凍したフォルダをどこでもいいですが、CドライブやProgram Filesに移動させます。
(自分はCドライブ直下に配置しました)

 配置したらエクスプローラーの左側にある「PC」を右クリックして出てきたメニューから「プロパティ」を選択します。
f:id:rikoubou:20191107142248p:plain

 システムの画面が表示されるので左側にある「システムの詳細設定」をクリックします。
f:id:rikoubou:20191107142739p:plain

環境変数」ボタンをクリックします。
f:id:rikoubou:20191107142925p:plain

 環境変数画面のシステム環境変数の「Path」の項目を選択した状態で「編集」ボタンをクリックします。
f:id:rikoubou:20191107143226p:plain

「新規」ボタンをクリックします。
f:id:rikoubou:20191107143354p:plain

 ffmpegのパス(binフォルダまでのパス)を入力して「OK」ボタンを押します。
(自分はCドライブ直下に配置したので以下のようなパスになっています)
f:id:rikoubou:20191107143715p:plain
 
 他の開いていた画面でもすべて「OK」ボタンを押して閉じます。

 これで環境変数の設定は終了です。


3:ffmpegが使えるかどうかを確認
 コマンドプロンプト、またはパワーシェルを開いて「ffmpeg」と打ち込んで以下のような表示になればffmpegが使えるようになっています。
f:id:rikoubou:20191107144324p:plain


 以上がWindows10でのffmpegのインストール方法です。

 ffmpegを使ってなんか色々やっていきたいです。


・参考資料

【MacOS】CatalinaにアップデートしてWacomの板タブが動かなくなったときの対処法

・2019/10/21追記:Wacomから公式にCatalinaに対応したドライバリリースと設定方法が公開されていたので以下にURLを貼っておきます。
www.wacom.com


 MacOSをCatalinaにアップデートしたらいつも使ってる板タブ(Intuos CTH-690)が動かなくなりました。

 SNSなどを見てみると結構同じような症状が出ている人がいるようでした。

 色々調べて自分の環境では動くようになったので、その備忘録です。

 基本的には以下のwacomのサポートの順序に従えば解決できるようですが、英語なので一応手順を備忘録としてまとめていきます。


 では始めます。


1:最新のドライバをインストールする
 最初に最新のドライバをインストールします。

 以下のページを開きます。

 
 スクロールした先に最新のMacOS用ドライバ(6.3.36-2)があるのでダウンロードボタンをクリックします。
f:id:rikoubou:20191014163427p:plain

 以下のようなインストール手順を示したウインドウが出てくるので「Confirm Download」をクリックしてインストーラをダウンロードします。
f:id:rikoubou:20191014163600p:plain

 あとはインストーラにしたがってドライバをインストールします。

 インストール後に再起動が促されるので、再起動させます。


2:最新のドライバがインストールされているか確認
 1の手順が終わったら「Wacom デスクトップセンター」を起動させます。

 アップデートの項目をクリックするとドライバのバージョンが確認できるので、インストールしたバージョンになっていることを確認します。
f:id:rikoubou:20191014163951p:plain


3:セキュリティの設定
 次にセキュリティの設定を行います。

 リンゴマークから「システム環境設定」を選択します。
f:id:rikoubou:20191014164147p:plain

「セキュリティとプライバシー」のアイコンをクリックします。
f:id:rikoubou:20191014164417p:plain

アクセシビリティ」を選択して左下の鍵マークをクリックします。
f:id:rikoubou:20191014164605p:plain

 ユーザー名とパスワードを尋ねられるので、入力して「ロック解除」ボタンをクリックします。
f:id:rikoubou:20191014164830p:plain

 変更できるようになるので、スクロールした先に「WacomTabletDriver.app」と「WacomTouchDriver.app」がすでに存在している場合はその2つを削除します。
f:id:rikoubou:20191014165130p:plain

 実際にやると以下のようになります。
f:id:rikoubou:20191014165507g:plain

 次に「+」ボタンを押してアプリケーションを追加します。
f:id:rikoubou:20191014165625p:plain

「WacomTabletDriver.app」と「WacomTouchDriver.app」を選択して「開く」ボタンを押して追加します(デフォルトなら「Macintosh HD→ライブラリ→Application Support→Tablet」の中にあります)。
f:id:rikoubou:20191014165902p:plain

「WacomTabletDriver.app」と「WacomTouchDriver.app」が追加されているのを確認し、鍵マークをクリックします。
f:id:rikoubou:20191014170012p:plain

 これでセキュリティの設定は終了です。


4:板タブを接続して動作確認
 板タプを接続して動作確認を行います。接続してすぐは反応しませんが、30秒ぐらい待つとペンが反応してくれるようになります。


 以上がCatalinaにアップデートした際にWacomの板タブを使えるようになるまでの手順です。

 環境やペンタブの種類などでこの方法では解決できない場合もあるかと思いますが、一応自分はこの方法で動くようになったので何かの助けになればと思います。

 Wacomにはサポートちゃんとして欲しいですね…。

【Blender】Blender2.8で雷のようなエフェクトを作ってみる

 Blender2.8を使って以下のような雷エフェクトを作ります。

 では始めます。


1:シームレス画像を用意する
 まずは使用するシームレス画像(ループ画像)を準備します。

 gimpで作りたい方は以下の記事を参照してください。

 用意するのが面倒な場合は以下の画像を保存して使用してください。
f:id:rikoubou:20191008151340p:plain

 以降はこの画像を使う前提で説明していきます。


2:Planeに画像貼り付け透過させ光らせる
 Blenderを起動させてデフォルトのCubeを削除します。
f:id:rikoubou:20191008153019p:plain

「Shift+Aキー」で「Mesh」→「Plane」を選択してPlaneオブジェクトを追加します。
f:id:rikoubou:20191008153252p:plain

 Planeを選択した状態で「Shading」タブからShading画面に切り替えて「New」ボタンをクリックしてマテリアルを新規に追加します。
f:id:rikoubou:20191008153705p:plain

 ノードが表示されるので「Shift+Aキー」から「Texture」→「Image Texture」を選択して追加します。
f:id:rikoubou:20191008154931p:plain

 Image Textureノードが追加されるので「Open」ボタンをクリックして対象の画像を読み込みます。
f:id:rikoubou:20191008155009p:plain

「Shift+Aキー」から「Shader」→「Transparent BSDF」を選択して追加します。
f:id:rikoubou:20191008155657p:plain

 続いて「Shift+Aキー」から「Shader」→「Mix Shader」を選択して追加します。
f:id:rikoubou:20191008155954p:plain

 ノードを以下のように繋ぎます。
f:id:rikoubou:20191008160308p:plain

 ノードを繋ぎ終えたらPlaneオブジェクトを選択した状態で「Material」のタブを開きます。
f:id:rikoubou:20191008161145p:plain

「Blend Mode」を「Alpha Blend」、「Shadow Mode」を「None」に設定します。
f:id:rikoubou:20191008161409p:plain

 これで以下のように画像の透過が適応され、画像の影が出ない設定になります。
f:id:rikoubou:20191008161603p:plain

 次に「Light」オブジェクトを選択して「Light」タブを開き「Sun」に切り替えて「Strength」の値を50に変更します。
f:id:rikoubou:20191008162402p:plain

 これでPlaneの見た目が以下のようになります。
f:id:rikoubou:20191008162559p:plain

 続いて「Plane」オブジェクトを選択して「Render」タブを開き「Bloom」にチェックを入れます。
f:id:rikoubou:20191008162705p:plain

 すると以下のように貼り付けたテクスチャが光っているような感じになります。
f:id:rikoubou:20191008162905p:plain

 背景の色を変更する場合は「World」タブを開いて「Color」をクリックすると色を変更できます。
f:id:rikoubou:20191008163351p:plain

 今回は背景を真っ黒にして以下のようなレンダリング結果になるようにしました。
f:id:rikoubou:20191008163554p:plain

 これで雷が光っているような見た目になったので、次はこれをアニメーションさせていきます。


3:アニメーションさせるためのノードを追加
「Shift+Aキー」から「Input」→「UV Map」を選択して追加します。
f:id:rikoubou:20191008164040p:plain

 追加されたUV Mapノードの何も入っていない部分をクリックして「UV Map」を選択します。これで現在のPlaneのUV Mapが設定されます。
f:id:rikoubou:20191008164328p:plain

「Shift+Aキー」から「Vector」→「Mapping」を選択して追加します。
f:id:rikoubou:20191008164627p:plain
 
 ノードを以下のように繋ぎます。
f:id:rikoubou:20191008164749p:plain

 ノード全体としては以下のようになります。
f:id:rikoubou:20191008164856p:plain

 この状態で「Mapping」ノードの「Location」のXの値をドラッグして値を変更すると、以下のようにテクスチャが値に合わせてスクロールします。
f:id:rikoubou:20191008165212g:plain

 あとはこのLocationの値をキーフレームに登録してアニメーションさせます。
 

4:アニメーションさせる
 アニメーションの設定をしやすくするために左上の画面を「Dope Sheet」、左下の画面を「Graph Editor」に変更します。
f:id:rikoubou:20191008170402p:plain
f:id:rikoubou:20191008170440p:plain

 画面としては以下ようにします。
f:id:rikoubou:20191008170559p:plain

 1フレーム目で「Location」の上にマウスカーソルがある状態で「i」キーを押してキーフレームを登録します。
f:id:rikoubou:20191008170811p:plain

 次に97フレーム目でXの値を変更(ここでは30)に設定して、「Location」の上にマウスカーソルがある状態で「i」キーを押してキーフレームを登録します。
f:id:rikoubou:20191008171253p:plain

「Output」タブを開いて「End」の値を最後のフレーム(97)に設定します。
f:id:rikoubou:20191008171457p:plain

 この状態でアニメーション再生させると以下のようになります。
f:id:rikoubou:20191008171830g:plain

 動いてはいますがスクロール速度は等速にはなっていません。等速にするためGraph Editorで設定を変更していきます。

 Graph Editor画面の「Only Selected」が青色になっている場合はクリックして無効にすることで、エディタ上にキーフレームアニメーションのカーブが表示されます。表示できたらYとZの値は今回関係ないので目のボタンをクリックして非表示にします。
f:id:rikoubou:20191008172459p:plain

 Graph Editor画面の右端にある「<」の部分をクリックしてメニューを表示させます。
f:id:rikoubou:20191008172825p:plain
f:id:rikoubou:20191008172905p:plain

 メニューを表示させたら終点をクリックした状態で「Interpolation」のプルダウンから「Linear」を選択します。
f:id:rikoubou:20191008173102p:plain

 同じように始点をクリックした状態で「Interpolation」のプルダウンから「Linear」を選択します。
f:id:rikoubou:20191008173436p:plain

 すると以下のように始点と終点が直線になります。
f:id:rikoubou:20191008173542p:plain

 この状態で再生させると以下のように等速でスクロールされるようになります。
f:id:rikoubou:20191008173751g:plain

 あとはPlaneの大きさを変更したり、カメラ位置を調節したりして動画として書き出すと以下のようになります。

 ちなみにLightの色を変更することでエフェクトの色を変更することもできます。
f:id:rikoubou:20191008175353g:plain


 以上がBlender2.8で雷のようなエフェクトを作る方法です。

 他にも色々やり方はあるかと思いますが、今までの知識を組み合わせることでこういうエフェクトを作れるのは楽しいですね。

 一応今回作成した.blendファイルを以下に公開しておきます。


・参考資料

【gimp】シームレステクスチャを作る方法

 シームレステクスチャとは所謂「継ぎ目のないテクスチャ」のことです。

 アニメーションなので背景がずっと模様や流れるような線が継ぎ目なくループしているようなやつです。

 今回はそのシームレステクスチャをgimpで作成する方法の備忘録です(本当はClipStudioPaintでやりたかったのですが、調べてもやり方がぱっと出てこなかったのでgimpです)。

 では始めます。


1:gimpを起動させてひとまず描く
 起動させてとりあえず普通に適当な模様を描いていきます。

 今回は以下のように雷っぽいエフェクトのようなものを描いてみました。
f:id:rikoubou:20191008144348p:plain

 投げ縄ツールで適当にザクザクと線を囲って塗りつぶしてから、ペンなどで適当に細部を書き加えていくやり方が一番楽かもしれないです。


2:オフセット機能を使ってシームレステクスチャにする
 とりあえずの模様ができたら模様を描いたレイヤーを選択した状態でメニューの「レイヤー」→「変形」→「Offset」を選択します。

 するとオフセットの画面が表示されます。
f:id:rikoubou:20191008145047p:plain

 この状態でキャンバスをクリックしたままドラッグすると、以下のようにレイヤーの端と端がループしているような感じになります。
f:id:rikoubou:20191008145328g:plain

 オフセット機能で画像の継ぎ目部分を表示させ、その継ぎ目が自然になるよう加筆修正します。
f:id:rikoubou:20191008145622p:plain
f:id:rikoubou:20191008145903p:plain

 これでシームレステクスチャは完成です。背景を透過させてpngファイルとして出力させると以下のようになります。
f:id:rikoubou:20191008150158p:plain


 以上がgimpでシームレステクスチャを作る方法です。

 ループさせたい素材などを作る場合には便利ですね。

 ClipStudioPaintでも似たようなことをやれたら色々便利なので、やり方を知ってる方は教えていただきたいです。


・参考資料