Quantcast
Channel: web pakun
Viewing all 247 articles
Browse latest View live

ブログやサイトの特定のページに、どんなワードで検索されて訪問してもらっているか(流入ワード)を調べる方法

$
0
0

ブログへのアクセスアップに欠かせないのが、過去に書いた記事に「どのような検索ワード」を入力して検索した結果、ユーザがたどり着いたのかという分析を行うことです。

この分析を行うと、自分のサイトやページがどのワードで強くなっているかを確認したり、そのページをリライトすることで、さらにアクセスを増やしたりすることができます。

特定ページへの流入ワードの分析には、GoogleSearchConsleを使う方法と、GoogleAnalyticsを使う方法がありますが、分析できる内容が少し異なります。

私は、GoogleSearchConsleを使う方法をよく使っており、おすすめもこの方法です。

 

GoogleSearchConsleで特定ページへの流入ワードを調べる方法

2018年に、GoogleSearchConsleのUIが新しくなっていますので、新しいUIで説明しますね。

まずはGoogleSearchConsleに移動した後で、調査対象のサイトを選択し、「検索パフォーマンス」を表示します。

これで、サイト全体の流入ワードが表示されますよね。

ここから、特定のページに絞り込んでいけばいいわけです。

search1

 

そこで、グラフの上部の▼の「+新規」をクリックして、フィルターの条件を追加します。↓ ↓ ↓

search2

 

すると、以下のように、URLで結果を絞り込むためのダイアログが表示されますので、対象のURLを入力します。↓ ↓ ↓

search2

 

以下が、特定のURLへの流入ワードになります。あとで、GoogleAnalyticsの結果と比較しますね。↓ ↓ ↓

search2

 

 

GoogleAnalyticsで特定ページへの流入ワードを調べる方法

では次に、GoogleAnalyticsで同じようなことをやってみます。

まず、「行動」⇒「すべてのページ」で、URLごとのアクセス数を表示させ、その後、分析したいページのURLをクリックして、対象のページだけに表示を絞ります。↓ ↓ ↓

search2

 

表示を絞ったら、「セカンダリディメンション」で表示する要素を追加します。

追加するのは「広告」⇒「キーワード」です。 ↓ ↓ ↓

search2

 

すると、以下のように、選択したページの流入キーワードが表示されます。↓ ↓ ↓

search2

 

 

GoogleSearchConsleとGoogleAnalyticsで表示される内容の違いと、前者をおすすめする理由

さて、2つの方法で流入キーワードを調べてみましたが、結果に明らかに違いがありますよね。

その違いを解説して、なぜ、GoogleSearchConsleの方をお勧めするかを説明します。(下の図は拡大できます。)

画像の上がSearchConsoleの結果、下がGoogleAnalyticsの結果です。

下のGoogleAnalyticsの方は、9割が「not provided」、つまり「不明、分からない」 となっています。これは、近年Googleの検索ページがSSLで暗号化されているため、Analytics側で実際の検索ワードが分からないためです。

一方、SearchConsoleの方は、キーワードがすべてわかっています。

同じGoogleなのに、なぜ後者の方だけわからないのか、不思議にもう人もいるかもしれませんが、これは、カウントの方式が異なるためです。

さらに、SearchConsoleの方は、実際にサイトに訪問したデータだけでなく、検索結果の表示された件数や、そこからクリックされた件数 もわかります。

違い

 

どちらを使うかは目的によりますが、私が流入ワードを分析する目的は、「どんなワードが強いか」を確認して、記事のリライトの方針を決定するためですので、潜在的なアクセスも分析できるSearchConsoleの方が目的に合っているというわけですね。


Googleドキュメントを作成し、それを他の人と共有して見てもらう方法

$
0
0

Googleドキュメントを作成し、それを他の人と共有することで、見てもらう方法について説明します。

 

Googleドライブを開く

Gmailアカウントを持っているのであれば、まず、Gmailの「受信トレイ」を開いておきます。

すると右上に■の集まりがありますので、そこをクリックしましょう。・・・①

するとGoogleで利用できるサービスが表示されますので、「ドライブ」を選択して、Googleドライブを開きます。・・・②

↓ ↓ ↓ 

開く

 

 

GoogleドライブでGoogleドキュメントを作成する

Googleドライブを開いたら、左上にある「+」ボタンを押しましょう。

↓ ↓ ↓ 

プラスボタン

 

すると、Googleドライブで作成できるファイルの種類が表示されますので、「Googleドライブ」を選択します。
もし、選択した後に右側に「空白のドキュメント」と表示されたら、それを選択してください。(表示されないことが多いです。)

↓ ↓ ↓ 

新規作成

 

これで新しいGoogleドキュメントが出来ました。左上の赤枠部分がドキュメントの名前なので、記事タイトルなどの名前を入力します。
後は、普通のWordやPagesのように文章を作っていけます。
WordやPagesで文章を作成して、それ全体を選択してコピーした後、ここに貼り付けてもいいと思います。

↓ ↓ ↓ 

ドキュメント

 

 

Googleドキュメントを共有する

分かりやすいように、動画にしました。

言葉でも説明すると、
・Googleドキュメントの右上の「共有」ボタンを押す。
・ダイアログが開くので、「共有可能なリンクを取得」を押す。
・すると、共有のためのリンクが作られるので、それをコピーして、このドキュメントを見てもらいたい人にメールなどで教える。

↓ ↓ ↓ 

動画

 

1000円以下で自宅のパソコン、iPhoneでTVを見る方法

$
0
0

今回は、自宅にパソコンやiPhoneはあるけど、TVは無い という人のために、自宅のPCやノートパソコン、iPhoneなどで地上波のTVを見る方法を解説します。

中国のサイトでは、日本のTVを配信しているサイトも存在していますが、

  • 合法でない
  • 回線が細く途切れ途切れになる
  • 広告が多すぎ
  • ウイルス感染の危険もある

 

など、あまりいいことはないため、お勧めしません。

今回ご紹介するのは、もちろん合法的ですし、通常のTVと同じで、単にTVではなく、PCの画面で見るというものです。

 

必要なもの

必要なものは、

  • PCまたはiPhoneなど映像を見る方の機械
  • TVチューナー

 

の2つです。この記事を見ている人は、PCかiPhoneは持っているでしょうから、TVチューナーがあればいいということになりますね。

この「TVチューナー」で、テレビの電波を受信して、変換することで、パソコンでもTVが見れるようになります。

 

ところで、地上波TVには、「フルセグ」「ワンセグ」と言われるものがあることを聞いたことがあると思います。

どちらも番組の内容は同じですが、「フルセグ」が自宅の通常のTV用に配信されているのに対して、「ワンセグ」は、携帯端末などでの再生のために配信されており、データの量をおさえられていて「フルセグ」よりは画質が粗いです。

自宅の数十インチのテレビではなく、携帯電話とかで見ることを前提としていますから、あたりまえですよね。

 

で、このTVチューナーによって、どちらの電波を捉えるかが違ってきますので、画質の粗いワンセグ用チューナーであれば、600円弱くらいからあります。

最近では、「フルセグ」を捉えるチューナーも人気で、こちらを使うと、1万円程度で自宅のTVと同じくらいの画質の番組を、PCやiPhoneで見ることができます。

今回私が購入したのは、「ワンセグ」用のもので、555円でした。

ニュースや天気予報、バラエティをみるために購入したのですが、確かに画質は粗いものの、途切れることなく再生できており、特に不自由ではありませんでした。

※きちんと映像を見るのに一番大事なのは、「電波がとどいているか」です。550円のチューナーでも、1万円のチューナーでも電波さえきちんと届いていれば、きれいに見れます。逆に届いていなければ、まったく見えません。。。購入後、後悔の無いように、記事下の方の、「電波について」も参考にしてみてください。

 

今回やったこと

今回は、ワンセグ用のチューナーを555円で購入しました。

これです。

 

ワンセグ用であれ、フルセグ用であれ、基本的には上記のようなUSBでPCにチューナーをつなぎ、専用のソフトでチューナー経由で、受信した電波を解読して画面に表示することになります。

そのためには、地上波の電波を受信できることが必須になるわけですが、これが一番肝心なところです。

 

電波について

上記の画像をみて、「アンテナがついているので、電波は受信できる」と思うかもしれませんが、 いろいろなサイトのレビューにも書いてあるように、ほとんど役に立ちません。

PCにつないだチューナーとTVの電波を発信する電波塔の間に何もなければ使えますが、「まったく何にもない」なんて、ほとんどありえないですよね。

アパートやマンションなどの場合は、付属のアンテナはほぼ使えないと思った方が良いと思います。

その場合、集合住宅の場合は、共同で設置しているアンテナから各部屋にアンテナ線が伸びていると思いますから、それとつなぐと、バリバリ受信状態がよくなります。

そのため、購入の際には、上記の商品にも記載のある、「UHFアンテナ接続対応」というのがついているものを選んだ方がよいです。

これ、何かというと、「UHFアンテナと接続できる付属品がついてますよ」という意味です。付属品とは、コレ↓です。

fuzoku plug

 

これを使うと、部屋からアンテナ線が出ている場合、それとつなぐことができます。

集合住宅や自宅で、大きなTV用アンテナがある場合、部屋にアンテナ用の出力部分があり、そこからTVにつないだりするアンテナ線をつなげることができます。

このアンテナ線のことを、「F型アンテナケーブル」と言います。

こんなアンテナ線を購入すれば、出力部分と、TVチューナーをつなぐことができます。

真ん中に1本の線があるので、すぐにわかると思います。

fuzoku plug

 

私も、初めはダメもとで付属のアンテナで受信してみましたが、まったくダメでした。

その後、部屋から伸びていたF型のアンテナケーブルと付属品の部品をチューナーに接続して受信してみると、見事、きれいに映りました。

fuzoku plug

 

fuzoku plug

 

 

PCでTVを視聴するのに必要なものまとめ

ではおさらいです。

必要なのは

 

ワンセグかフルセグ用のTVチューナー

ワンセグ用なら

がお勧めです。

Amazonなら、おなじものが「これ」ですが、700円程度です。

フルセグ用なら今は、これが一番評判がいいですね。

Amazonでも同程度の値段です。「これ」ですね。

 

電波を確実にとらえるためのアンテナ線

自宅のTVで以前使っていたアンテナ線があれば、それで十分です。

もし、ない場合は、部屋のアンテナ出力口からPCまでの長さのF型アンテナ線を一つ買いましょう。

これは数百円で売っています。

 

iPhoneでフルセグを見るには

最後に、iPhone用もありますので、こちらだと、あまりアンテナを気にしないで見れると思います。

ただし、電話のアンテナと地上波のアンテナは違いますので、ご注意を。

それと、Lightningケーブルでチューナーをつなぐので、有線イヤホンは挿せません。

イヤホンで聞きたい場合は、無線イヤホンが必要ななりますので、注意してください。

 

Bootstrap3のModal(モーダル・ダイアログ)で、毎回異なるリモートのコンテンツを読み込むサンプルソース

$
0
0

一覧画面などで、リンクやボタンを押された場合に、モーダル画面で情報を表示するというニーズは結構あります。

自分で一から実装するとなると、結構大変だったりするので、既存の仕組みを利用するといいのですが、使い方に慣れていないと、少しの振る舞いを変更するのに、調べたりしないといけなかったりして、時間とっちゃうんですよね。。

なので、汎用的な仕組みを使えるようになっておくと便利です。

汎用的なモーダル画面の仕組みはいくつかありますが、私がいろいろと試行錯誤してたどり着いたのは、「BootstrapのModal」「jQuery colorbox」の2つが使いやすいです。

(2018/11月現在)

 

この記事では、「BootstrapのModal」の使い方を、実践的に使うさまざまなTipsとともにご紹介します。

サンプルのソースは、なるべく汎用的に利用できるように記載していますので、使えるところはコピペで使ってください。

boot strap modal

 

 

BootstrapのModalの良いところ

colorboxを使うか、bootstrapのmodalを使うか、要は使いどころとか、案件の要件をどの程度満たすかだと思いますが、使ってみて、Bootstrapのmodalのいいところを述べたいと思います。

開くモーダル画面のデザインがしやすい。

colorboxは、モーダルの上下にタイトルやカスタムのボタンを作るのが難しいですが、Bootstrapの場合は比較的簡単に出来ます。

ただし、モーダルが開くときのエフェクトや振る舞いなどは、colorboxの方が細かい制御ができる印象があります。

ただ、BootstrapのModalでも、たいていのことはできるでしょう。

 

Bootstrapのmodalの組み込み方

はじめに、Bootstrap をダウンロードしてきます。

https://getbootstrap.com/

 

現在(2018/11月)は、ver4.1が最新版のようですが、今のところModalの使い方のサンプルなどがネット上に多いのはVer3なので、困ったときのためにも、Ver3.3.7を利用しました。

 

また、ネット上のいくつかのサンプルは、Bootstrapのデータ・バインドの仕組みを使っていて、簡単に記載できますが、どのIDとどの名称がつながっているのかが分かりにくく、動きを細かくカスタマイズしようとしたときに、手が止まってしまいがちなので、javascript(jQuery)を使って、制御するようなサンプルにしています。

 

なので、jQueryもダウンロードしておきます。

 

https://jquery.com/

 

このサンプルでは、Ver3.3.1を利用しました。

 

用意はこの「Bootstrap 3」と「jQuery 3」だけなので、準備できたら、以下のソースを記載します。

 

親画面のソース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<head>
		<title>Parent Page to Open Modal Window</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />



	</head>

	<body>

<script src="http://localhost/sample/jquery-3.3.1.min.js"></script>

<script src="http://localhost/sample/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="http://localhost/sample/bootstrap-3.3.7-dist/css/bootstrap.min.css" />


<h1>Parent Page to Open Modal Window</h1>


<script>
$(function () {
	$("#myModal").on("show.bs.modal", function(e) {
		console.log('show.bs.modal');
	});
});

function OnLinkClick(this_instance) {
    console.log('call OnLinkClick');
    //選択されたレコードのvalue値を、モーダルのデータのロード先としてセット。
    $('#selected_target').val(this_instance.getAttribute('value'));
    
    call_after_func();
    
    $('#myModal').modal({
    	keyboard: true,
    	backdrop: true
    });
    
    return false;
}

function call_after_func() {
		console.log('call_after_func');
		$(document).find("#modal-body").load($('#selected_target').val(), function(responseTxt, statusTxt, xhr){
			if(statusTxt == "success")
				 alert("External content loaded successfully!");
			if(statusTxt == "error")
				alert("Error: " + xhr.status + ": " + xhr.statusText);
		});
}


//モーダル側のcloseボタンが押されたときの処理
$(function () {
	$("#mdlClose").on("click", function(e) {
		console.log('call modal close');
		console.dir($('#myModal'));
		$('#myModal').removeData('bs.modal');
		$('body').removeClass('modal-open');
  		$('.modal-backdrop').remove();
  		$('#modal-body').empty();
  		$('#myModal').modal('hide');
	});
});

</script>

		
<input type="hidden" name="selected_target" id="selected_target" value="">

<a href='#responsive' onclick='OnLinkClick(this);' value='c1.html'>Launch Modal(C1)</a>
<br />
<a href='#responsive' onclick='OnLinkClick(this);' value='c2.html'>Launch Modal(C2)</a>

<!-- Default bootstrap modal example -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Modal Contents</h4>
      </div>
      <div class="modal-body" id="modal-body">
        ...
      </div>
      <div class="modal-footer">
      	<div class="text-center">
        	<button type="button" class="btn" data-dismiss="modal" id="mdlClose">Close</button>
        	<button type="button" class="btn btn-primary" data-dismiss="modal" id="mdlChose">Chose</button>
      	</div>  
      </div>
    </div>
  </div>
</div>


</body>

</html>

 

子画面のソース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<head>
		<title>Child Page</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

	</head>

	<body>
	
<h1>Child Page</h1>



Child Page Contents


</body>
</html>

 

 

ソースの内容を解説

いくつかポイントとなるところを解説しておきます。

基本的には、Bootstrapのmodalは、親画面側に、子画面の入れ物も用意しておきます。

親画面の「id=”myModal”」となってるところが、Modalの枠になります。

この中に、「id=”modal-body”」というところがあると思いますが、ここに、リモートから読み込んだコンテンツをロードして、表示することになります。

親画面と子画面を用意するというよりは、「親画面と、子画面の枠を親側に用意しておき、ボタンがクリックされたら、その子画面の枠を表示したうえで、別途用意した子画面用コンテンツのページを非同期で読み込む」と考えるのがイメージしやすいと思います。

以下の解説で、いくつかオプションなどが出てきますが、基本手kにはver3もver4もほぼ一緒なので、「ここ」などを参照すると良いでしょう。

動きとしては、「Launch Modal」ボタンが押されたら、「OnLinkClick()」が呼ばれて、

$('#myModal').modal({
    	keyboard: true,
    	backdrop: true
});

で、モーダル画面を開きます。「keyboard」などは、オプションなので、渡さなくても大丈夫です。

 

「call_after_func()」の中では、ajaxで非同期にリモートページのコンテンツをGETし、「#modal-body」部分に読み込んでいます。

$(document).find("#modal-body").load($('#selected_target').val()

の部分ですね。

 

さらに、子画面の「Close」ボタンが押されたときの動きが、

$(function () {
	$("#mdlClose").on("click", function(e) {
		console.log('call modal close');
		console.dir($('#myModal'));
		$('#myModal').removeData('bs.modal');
		$('body').removeClass('modal-open');
  		$('.modal-backdrop').remove();
  		$('#modal-body').empty();
  		$('#myModal').modal('hide');
	});
});

になります。

「removeData()」や「empty()」でコンテンツをきれいに掃除しているのがわかるでしょうか。これがないと、何度もモーダル表示を読んだ場合に、動きがおかしくなることがあります。

 

 

詰まったときやエラーの時に役立ちそうな情報

私が実装していた時に、困ったことで、解決したものを以下に記載しておきます。

 

モーダル画面を開いたら、親画面の上部にスクロールしてしまう

縦に長い画面などでモーダル画面を開いた場合、開いた位置はそのままでモーダルが開いてほしいですよね。

しかし、いちいちTopに移動してしまうことがあります。その場合、上記のサンプルのようにhrefの値を「#」ではなく「#responsive」にするとOKです。

 

ChromeなどのConsoleでエラーがでてしまう。

一応、エラーなく動くだけど、Chromeなどの開発者コンソールなどのデバッガで以下のエラーが出ることがあります。

Synchronous XMLHttpRequest on the main thread is deprecated 
because of its detrimental effects to the end user's experience. 

その場合、このページにも書いたように、子画面側のjavascriptの記述を見直すと良いです。

 

子画面のコンテンツ領域に縦のスクロールバーを表示させたい

子画面のコンテンツが縦に長い場合、スクロールバーを表示させたいですよね。その場合は、cssに以下の記述を追加すると良いです。

.modal-body {
    max-height: calc(100vh - 200px);
    overflow-y: auto;
}

colorbox、modalなど別リソースの読み込みでSynchronous XMLHttpRequest on the main thread is deprecated が出る時の対処法

$
0
0

特に、colorboxやmodalで親画面から子画面を呼び出す場合に良く出るんですが、

Synchronous XMLHttpRequest on the main thread is deprecated
because of its detrimental effects to the end user's experience.

というエラーに遭遇することがあります。

これが出てしまう場合、原因はajaxで同期的にリモートのコンテンツを読み込んで書き換えようとしているからです。

なので、対処としては、ajax呼び出しを非同期呼び出しにすればいいので、下記サンプルのように、

function call_ajax() {
	console.log('call ajax');
	
	$.ajax({
		url:'/some.html',
		async:true,
		type:'GET',
	})
	
	// Ajaxリクエストが成功した時発動
	.done( (data) => {
		console.log('success');
	})
	// Ajaxリクエストが失敗した時発動
	.fail( (data) => {
		alert("Error: " + xhr.status + ": " + xhr.statusText);
	})
	// Ajaxリクエストが成功・失敗どちらでも発動
	.always( (data) => {
	
	});
                
}

「async:true」がajaxに渡るようにするとワーニングが出ないようになります。

 

上記の対処でも、どうしてもエラー出てしまう場合

まれに、上記の対応を行なっても、ワーニングが出続けてしまうことがあります。

そんなときは、そのajaxの関数の呼び出しの度に、ワーニングが出るか、注意深く見てみましょう。

初回の呼び出しのときにしかワーニングが表示されない場合は、以下の可能性も疑ってみると良いと思います。

ajax呼び出しで、別ページののコンテンツを呼び出している場合、そのページ上部でjavascriptのファイル(jsファイル)を読み込んでいないかを確認しましょう。

その場合、ページ読み込み時に、そのjsファイルを同期的にロードするため、当該エラーが表示されてしまうことがあります。

私は、結構これでハマリました。。。

お役に立てば幸いです。

colorbox(jQuery lightbox)の汎用的な使い方サンプルとエラーが表示される場合の対処

$
0
0

先日、Bootstrapのmodal表示機能をご紹介しましたが、colorboxも良く使われるモーダル表示のライブラリです。

jQueryがあれば動くので、結構、多くの人が使っていると思います。

 

colorboxの良いところ

モーダル表示させるときの振る舞いや表示位置など、動きの細かい制御が可能。

モーダルオープン時、コンテンツロード時、クローズ時などのイベントをハンドリンクできるため、それらを契機に、さまざまな振る舞いをJavaScriptで記述することができる。

一方、デザインは、カスタマイズしにくい。

(デザインについては、Bootstrapのmodalのほうがカスタマイズしやすい印象です。)

多くの人が使っているので、ネット上に情報がたくさんあります。困ったときに調査し、ソリューションを見つけやすいです。

 

Bootstrapのmodalの組み込み方

jQueryを使いって実現されているので、jQueryをダウンロードしておきます。

https://jquery.com/

このサンプルでは、Ver3.3.1を利用しました。

また、colorboxもダウンロードしておきます。

http://www.jacklmoore.com/colorbox/

ダウンロードしたcolorboxのファイルを解凍すると、example1~example5のサンプルも入っています。この中には、異なるデザインのcssとイメージがありますので、利用してみて、自分のイメージ近いサンプルのcssを使うとよいでしょう。

デザインをカスタマイズする場合も、これらを元に変更するといいです。

さて、用意はこの「jQuery 3」と「colorbpx」だけなので、準備できたら、以下のソースを記載します。

親画面のソース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<head>
		<title>colorbox modal sample parent page</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

	</head>

	<body>

<script src="./jquery-3.3.1.min.js"></script>

<script src="./colorbox-master/jquery.colorbox-min.js"></script>
<link rel="stylesheet" href="./colorbox-master/example4/colorbox.css" />




	<h1>colorbox modal sample parent page</h1>

<script type="text/javascript">

function call_cbox() {
	jQuery.colorbox({href:'./c1.html'
		,scrolling:'auto'
		//,iframe:true
		,height:'80%'
		,width:'80%'
		,title: function(){
		var custom_btn = '<button type="button" id="custom_btn" onclick="cbox_button_called(); return false;">CustomBtn</button>';
		return custom_btn;
		}
	});
}

function cbox_button_called(){
	console.log('cbox_button_called');
	$('#cboxClose').click();
	$('#cboxOverlay').remove();
	$('#colorbox').remove();
}


$(document).bind('cbox_complete', function(){
  console.log('cbox_complete');
});

</script>
<a href="#" onclick="call_cbox(); return false;">call colorbox</a>

</body>
</html>

子画面のソース

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<head>
		<title>colorbox modal sample child page</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />



</head>
<body>

	<h1>colorbox modal sample child page</h1>

</body>
</html>

 

ソースの内容とつまづきやすいポイントを解説

基本的には、「jQuery.colorbox」を呼べばいいのですが、いろいろと複雑な動きをさせようと思うと、考慮点が多いので、そういうときでも汎用的に使えるように、解説を追記します。

 

jQuery.colorboxのオプションと、カスタムのボタンを表示させる方法

「jQuery.colorbox」には以下のようにオプションが渡せます。

オプションの詳細は上記のダウンロードページに詳しくのっていますが、「iframe:true」をtrueにしたりfalseにしたりすることで、iframeとしてモーダル画面のコンテンツをロードできます。
また、「title」というオプションは、モーダル画面に表示するタイトルをセットできますが、これにhtmlでボタンを渡すことで、モーダル画面にカスタムのボタンを複数追加することもできます。

jQuery.colorbox({href:'./c1.html'
	,scrolling:'auto'
	,iframe:true
	,height:'80%'
	,width:'80%'
	,title: function(){
	var custom_btn = '<button type="button" id="custom_btn" onclick="cbox_button_called(); return false;">CustomBtn</button>';
	return custom_btn;
	}
});

 

充実のイベントフック

最初に述べましたが、モーダルの開閉時やコンテンツロード時などにイベントをフックできますので、そのタイミングでさまざまな処理を行なうことが出来ます。

下記は、コンテンツがロードされた直後に、ログを吐くサンプルです。

$(document).bind('cbox_complete', function(){
  console.log('cbox_complete');
});

 

何回もボタンを閉じたりしたときなどに動きがおかしくなる場合の対処

colorboxは、初期化の際に、モーダルのコンテンツを読み込むdiv領域を挿入して、それを擬似的にモーダルっぽく見せています。(多くのモーダルのライブラリもそうですが)

なので、複数回開いたり閉じたりすると、競合を起こして、動きがおかしくなって開かなくなったり、ブラウザのデバッグコンソールでjavascriptのエラーが表示されたりします。

そんな場合は、「閉じる」際に、挿入されたdiv領域(#cboxOverlay)などをきれいに除去してあげると良いです。下記みたいに。

function cbox_button_called(){
	console.log('cbox_button_called');
	$('#cboxClose').click();
	$('#cboxOverlay').remove();
	$('#colorbox').remove();
}

無限スクロール(infinite scroll)を実現するいくつかの方法と、jScrollによる実装サンプル

$
0
0

Webページで一覧表示の画面などで、一番下までスクロールして表示したら、次の一覧を次々に読み込んで、際限なくスクロールさせるエフェクト、一般的には「無限スクロール」と呼ばれます。

最近使う機会が増えて来たので、簡単にサンプルコードを動かせるようにメモしておきます。

 

どの「無限スクロール」ライブラリを使うか

調べたところ、使いやすそうなライブラリは2つありました。

「Infinite Scroll」と「jScroll」です。

それぞれ、特徴を記載したいと思います。

 

Infinite Scroll

InfiniteScroll

 

使いやすそうで、デザインの拡張性も高い。

ただ、ライセンス体系が2つあり、商用で使うには、お金がかかるみたい。

個人で使うにはいいと思いますが、お仕事やプロジェクトで利用するのはやめておいたほうがいいと思った。

ライセンス体系

 

 

jScroll

jScroll

 

jQueryで動く、無限スクロールとオートページャーのライブラリ。

MIT とGPL2のダブルライセンス。こちらはフリーで使えると思う。

ということで、私が使っているのは「jScroll」です。

 

「jScroll」を利用した無限スクロールのサンプルと使い方

jScrollを使うには、jQuery1.8以上が必要ですので、ダウンロードしておきましょう。

このサンプルでは、Ver3.3.1を利用しました。

また、jScrollもインストールします。いくつか方法がありますが、一般的にはファイルをダウンロードしてくるほうか多いかな?

下記のgithubのページの右下の緑のボタン「Clone or download」を押して、zipファイルとしてダウンロードできます。

https://github.com/pklauzinski/jscroll

jScroll download

 

解凍したファイルで、最低限「jquery.jscroll.min.js」と「jscroll.css」が必要です。

さて、用意はこの「jQuery」と「jScroll」だけなので、準備できたら、以下のソースを記載します。

どのようなサンプルかというと、もともとの画面が「org1.html」で、このページを開いて、「4:4」という文字の下のところまでスクロールすると、次の画面「org2.html」が読み込まれます。この「org2.html」の中で「org1.html」を読み込むように設定してありますので、「スクロールを続ければ、永遠に交互に読み込まれ続ける」サンプルです。

親画面のソース

<head>
<title>Parent Page to Locad infinite scroll</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
 
<script src="http://localhost/media/jquery-3.3.1.min.js"></script>
 
<script src="http://localhost/media/jscroll/jquery.jscroll.min.js"></script>
<link rel="stylesheet" href="http://localhost/media/jscroll/jscroll.css" />

<h1>Parent Page to Locad infinite scroll</h1>
 

<script>

$(function() {
        $('#infinite_content').jscroll({
        	debug:true,
            autoTrigger: true,
            autoTriggerUntil: 30,
            loadingHtml: '<img class="center-block" src="./img/Loading_icon.gif" alt="Loading..." />',
            padding: 0,
            nextSelector: 'a.jscroll-next:last',
            contentSelector: '.jscroll-next',
            //callback: function() {
            //     $('ul.pagination').remove();
        	//}
    });
});

</script>
 
<div id="infinite_content">
    

        <div class="jscroll-next">
            1:1<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            2:2<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            3:3<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            4:4<br /><br /><br /><br /><br />
         </div>

  <a class="jscroll-next" href='./org2.html'>last</a>

</div>

</body>

 

 

子画面のソース

<head>
<title>LoadedPage to infinite</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head>
<body>

<h1>LoadedPage to infinite</h1>
 
 
<div id="infinite_content">
    

        <div class="jscroll-next">
            5:5<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            6:6<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            7:7<br /><br /><br /><br /><br />
         </div>
         
         <div class="jscroll-next">
            8:8<br /><br /><br /><br /><br />
         </div>

  <a class="jscroll-next" href='./org1.html'>last</a>

</div>
</body>

 

ソースの内容を解説

いくつかポイントとなるところを解説しておきます。

キモはずばり以下の初期化の部分ですね。

$(function() {
        $('#infinite_content').jscroll({
            debug:true,
            autoTrigger: true,
            autoTriggerUntil: 30,
            padding: 0,
            nextSelector: 'a.jscroll-next:last',
            contentSelector: '.jscroll-next',
    });
});

 

「id=”infinite_content”」のdivで囲まれた領域を無限にスクロールする初期化のコードになります。

「nextSelector」が「a.jscroll-next:last」となっているのは、aタグの中のclass「jscroll-next」の最後の要素までスクロールしたら、次の画面をロードするという指定です。

次の画面をロードしたときに、「contentSelector」で指定しているclass「jscroll-next」の部分だけが繰り返しの対象になります。

 

複数のテーブルから件数【select count(*)】を1行で効率的に取得するSQLのサンプル

$
0
0

複数のテーブルがあった場合に、それぞれのテーブルにレコード件数がどれくらいずつ入っているのかを確認したい時ってありますよね。

select cout(*) すればいいのですが、一つ一つのテーブルに対してやるのも、、、。

ということで、複数のテーブルのレコード件数を1発で取得するSQLです。

select * from 
(select count(*) as count_a from TBL_A)
,(select count(*) as count_b from TBL_B)
,(select count(*) as count_c from TBL_C)

↓ ↓ ↓

すると、こんな感じで1行で取得できます。

query

 

 

※注意

下記のようにサブクエリを使っても書けますが、

「これはやったらいけません!」

from句以降のTBL_A, TBL_B, TBL_Cの直積(全部のレコードの組み合わせ)の件数のレコードが返ってきますので、おそろしくパフォーマンスが悪いためです。下手をすると、全く応答が返ってこなくなるので、気をつけてください。

select 
(select count(*) from TBL_A) as count_a
, (select count(*)  from TBL_B) as count_b
, (select count(*) from TBL_C) as count_c  
from  TBL_A, TBL_B, TBL_C

↓ ↓ ↓

query2

 


お気に入りを左側に固定表示するにはChromeのプラグイン『ブックマークサイドバー』が便利だよ!

$
0
0

私は通常Chromeを使用していますが、ブックマーク・バーに表示できるサイトの数があまり多くないので、以前は、「ものすごく頻繁にアクセスするサイトを厳選して上の方に配置してアクセスしやすくする」ということをやっていました。

でも、ちょっと使いづらかったので、「ブックマークを左サイドバーに固定で表示することができる方法はないかな~」と探しながら、いくつかの方法を試していました。いろいろ試しましたが、結果として、Chromeを使う場合は、「ブックマークサイドバー」プラグインを利用する方法が一番便利で使いやすかったのでご紹介します。

 

Chromeのプラグイン『ブックマークサイドバー』とは

Chromeはデフォルトではブックマークを左や右のサイドバーに表示することはできません。

それを可能にするのがプラグインの『ブックマークサイドバー』です。

まずはどんなものか、以下の動画を見てください。↓ ↓ ↓ ↓ ↓

カーソルを左のサイドバーに近づけると、ブックマークを表示する半透明の領域で「にゅうっ」と出てくるので、そこをクリックするとお気に入りが開きます。

ブックマークサイドバー

 

いつもは左側に隠れていて、必要な時だけ出てくるので、サイトを表示する領域が狭くなってしまうこともありません。

 

 

インストールと基本的な設定方法

インストール

chromeウェブストアで「ブックマークサイドバー」と検索すればHitしますので、機能拡張としてインストールします。

ウェブストア

 

 

基本設定(開き方をカスタマイズ)

最初のインストール時にウィザードが開き、選択肢を選んでいくだけで基本的な設定ができてしまうのであまり迷うことはありませんが、初めてだと以下の選択時に迷うかもしれないので解説しておきます。

  • 左クリック・・・カーソルをサイドバーに近づけると半透明の領域が開きますが、それをマウスの左クリックしたときにブックマークのリストが開きます。
  • 右クリック・・・上記と似ていますが、マウスの右クリックしたときにブックマークのリストが開きます。
  • マウスオーバー・・・カーソルをサイドバーに近づけ、表示された半透明の領域にマウスオーバーしただけで開きます。少し、うざいかも。
  • アイコンをクリック・・・これは上記の3つとは異なり、Chromeの右上の機能拡張アイコンをクリックした時に開く設定です。これだとマウスの移動が大きくなるので、あまり便利さを感じられないかもしれないですね。

 

hirakikata

 

 

見た目をカスタマイズ

デフォルトの外観設定では、少し、文字が大きいと思いましたので、私の場合は、少しフォントサイズを小さくしました。

『ブックマークサイドバー』では見た目や開くときのアニメーションなど、自分好みにカスタマイズできます。

hirakikata

 

 

新しくお気に入りを追加するには

初めて使うと新規にお気に入りを追加するやり方が分からないかもしれません。

こんな風に、URLを選択して、それをそのまま『ブックマークサイドバー』にドラッグすると、お気に入りを追加できます。

もちろん、Chromeのブックマークとも連動しているので、通常の★マークをクリックしても追加できますが、それだと、一番最後に追加されてしまいますよね。ドラッグする方法だと、追加時に自分が好きなところに配置できるので便利だと思います。

hirakikata

 

また、サイト名の右側の矢印部分をつかむと、そのままドラッグしてリストの位置を変えられるので、結構便利ですよ。

hirakikata

 

 

 

ajax呼出しやDOM要素変更後にjQueryが動かないときの対処法

$
0
0

ajax呼出し後やHTMLへのDOM要素の追加後に、javascriptの関数が動かないこと、よくありますよね。

原因はいろいろあるんですが、初回はうまく動くのに、2回目以降や、何か操作をした後に動かない場合は、多くの場合、イベントハンドラをリバインドするとうまくいく かもしれません。

そのやり方について、Tipsを。

 

最近のjava scriptのライブラリやjQueryを利用したライブラリでは、画面のロード時に、ある要素に対してイベントハンドラを「バインド」(bind)することが多いです。

これによりその要素がクリックされたときに、あらかじめ決めてあった動きが行なわれるわけですね。

たとえば、モーダル表示によく利用するjQueryプラグイン『Magnific Popup』などは、下記のように、画面ロード時に初期化してバインド(そのclass要素に対して、イベントハンドラを関連付ける。)を行なったりします。

$(function(){
  $('.popup-img').magnificPopup({
      type: 'image'
  });
});

 

しかし、ajaxで別なコンテンツをロードしたときや、java scriptで別のDOM要素を挿入したときは、新しい要素に対してはイベントハンドラのバインドがされません。

画面ロードの際にバインドしており、その後追加された新しい要素に対しては紐付いていないので、あたりまえですよね。

 

なので、ボタンや要素をクリックしても「動かねー」ということになってしまいます。

そういう場合、以下のように、バインドする初期化処理を別に切り出し、画面ロード時やコンテンツが追加ロードされたとき、ajaxで新しいコンテンツがロードされたときにその関数を呼び出してあげるようにするとよいです。

たとえば、こんな感じ。

//バインドする関数を定義
function bindModal(){
  $('.popup-img').magnificPopup({
      type: 'image'
  });
}

//上記の関数を、画面ロード時に呼ぶ。
$(document).ready(function(){
  bindModal();
});

//あとは、ajax完了時など、要素が追加されたときにも呼び出すようにする。

 

jQueryで「… is not a function TypeError:」のエラーが出る場合のjQuery.noConflictでの対処

$
0
0

jQueryを利用しているサイトを開発していて良く出くわすのが、「…is not a function…」というエラー。

たいていの場合は「jQueryの初期化がうまくいっていない場合」に出力されます。

初期化がうまくいっていないので、関数(function)として認識できないエラーですね。

こんな場合、

・きちんとjQueryのjsファイルを読み込めているかを確認する。

・jQueryを使うプラグインやライブラリのjsファイルを読み込めているか確認する。

などの対処を行なうと解決することが多いです。

 

が、、、

それでも解決しない場合、どうしたらいいでしょうか。

疑わしいのは、ajaxで別なHTMLソースを読み込んでいたり、たくさんのjsファイルを読み込んでいる場合、「jQueryが繰り返して呼ばれていることで、競合していないか」ということです。

一度jQueryのjsファイルを読み込んだ後、ajaxで読み込むHTMLソース側にもjQueryのjsファイルを読み込む記述があったりすると、「…is not a function…」というエラーが表示されることがあります。

 

そのような場合は、ajax側でjQueryのjsファイルを読み込まないようにすることでエラー回避できる場合があります。

また、呼び出しているhtmlが別なサイトで、自分では変更できない場合、以下のように、jQueryを別変数に定義することも可能です。

この場合、jsファイルは普通に複数呼んでもOKで、その後、jQueryやそのプラグインを使うときに、以下のように別な変数を定義します。その後は、通常「$」と各部分を、定義した変数(下記で言うと「jqOther」を使って記述します。)

結構便利なTipsです。

 

//jQueryを別な変数「jqOther」で定義する。
var jqOther = jQuery.noConflict(true);

//以降は、$を「jqOther」に変換して使用。
jqDj(function(){

	if(jqOther('.image').length){
		jqOther('.image').slick({
			arrows: false,
		});
	}

	jqOther('.modal-close').on('click',function(){
		$('.modal').magnificPopup('close');
		return false;
	});


});

 

heroku上で、ローカルのeclipseで開発しているtomcatのWebアプリを動かす手順

$
0
0

「通常の開発はローカルのeclipseで行い、動作確認も、ローカルのTomcatで行なうけど、本番や外部からのアクセスが必要なケースでHerokuに載せて動かしたい」というニーズに対する記事です。

Herokuにアカウントがある前提なので、まだアカウントを作成していない人は、この記事を参考に、作成と、CLIのセットアップ(「Heroku Toolbelt」のダウンロードとインストール)を行なっておきましょう。

さて、準備が出来ている前提で、早速すすめます。 まず、herokuにログインして、アプリを作りましょう。

//プロキシの設定(proxy背後にいる場合)
set HTTPS_PROXY=https://proxy.server.com:portnumber

//herokuへのログイン
heroku login

//新規アプリをheroku上で作成
heroku apps:create <アプリ名>・・・「my-tom-20190128」としました。

これで、始めに、後程アップする先のappを作成しておきます。

 

Maven形式のプロジェクトを作る

次に、好きなところでeclipseでMavenプロジェクトを作成します。

上記のapp名とあわせておくと、分かりやすいでしょう。

Mavenプロジェクト1

 

Mavenプロジェクト2

 

Mavenプロジェクト3

 

できたら、ざっと眺めてみましょう。

Mavenプロジェクトerror

 

Mavenプロジェクトerror2

 

エラーが表示されていますよね。 クラスが見つからないというエラーです。

また、プロジェクト構成でもエラーが出ているはずなので、最初に、これらのエラーを解消しておきましょう。

 

①HttpServletが見つかるようにする。

ビルド用のクラスパスにHttpServletがないので、入れておきます。

そのためには、プロジェクト内の「pom.xml」に以下の依存関係を追加しましょう。

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
</dependency>

を追加

 

②ソース用のディレクトリを追加

プロジェクトのプロパティを開くと、「Javaのビルドパス」で、以下のように2つのエラーが出ています。

これは、MavenのWebアプリの雛形にそのディレクトリが含まれていないためなので、その場所に手動で作ってあげればOKです。

プロジェクトを作成したディレクトリ配下に「src/main/java」と「src/test/java」を作成します。

Mavenプロジェクトerror3

 

 

③プロジェクト・ファセットを変更

デフォルトでは、プロジェクト・ファセットのJavaのバージョンが1.5になっているので、これを1.8に変更しておきます。

Mavenプロジェクトerror4

 

 

④heroku上で実行するときに必要なjarの追加

これは、プロジェクトのエラーとは関係ないですが、後ほど、herokuにアップして実行するときに、以下のjarの設定が必要になってきますので、「pom.xml」に

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals><goal>copy</goal></goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>com.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>9.0.13.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
</plugins>

の記述を追加します。

https://devcenter.heroku.com/articles/java-webapp-runner

このheorku公式ページにも記載があるので、分からない場合は参考にしてください。

 

簡単なアプリで動作確認する

ここまでで動かす準備は出来たので、簡単なservletを追加して、動作確認してみましょう。

「src/main/java」配下に適当なパッケージを作成し、「HelloServlet.java」を作成します。

package my.dev;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
        name = "MyServlet",
        urlPatterns = {"/hello"}
    )
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        ServletOutputStream out = resp.getOutputStream();
        out.write("hello heroku".getBytes());
        out.flush();
        out.close();
    }

}

 

なお、jspはMavenの雛形によって、プロジェクトのフォルダの「\src\main\webapp」配下に「index.jsp」が出来ていると思います。

ここまで出来たら、EclipseでTomcatを起動して、動作確認を行ないましょう。

 

http://localhost:8080/my-tom-20190128/

http://localhost:8080/my-tom-20190128/hello

 

が表示されましたか?

 

herokuにWebアプリをデプロイ

いよいよ、herokuにこのWebアプリを載せます。

 

①Procfileの作成

Webアプリがherokuにアップされたときや動くときに実行されるコマンドなどを記載できるのが「Procfiile」です。

プロジェクト直下に空の「Procfiile」を作成し、以下の一行を記載しておきましょう。

 

web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

 

これで、実行時にwebapp-runner.jarを使うことが出来ます。

gitの初期化とremoteの登録 次に以下のコマンドでgitを初期化して、リモートリポジトリを登録します。

//プロジェクトディレクトリに移動
$cd <プロジェクトのルートディレクトリ>

//gitの初期化
$git init

//リモートリポジトリの登録
$heroku git:remote -a <アプリ名(my-tom-20190128)>

Mavenプロジェクトerror3

 

コマンド実行後は、「heroku」という名称でリモートが登録されていることが分かりますね。 (通常はoriginであることが多いので、少し注意!)

 

gitでcommitする

ここまでくれば、もう少し。

プロジェクトのソースをcommitして、pushすれば、OKです。

//gitにリソースの追加
$git add .

//コミットのコメント追加
git commit -am "initial commit"

//リモートリポジトリへpush
git push heroku master

 

最後のpushにより、ソースがherokuにアップされ、コンパイルなどが行なわれます。

そして、さっきの「Procfile」に基づいて実行されるというわけですね。

git push heroku masterが終わったら、heroku psコマンドを叩いてみて、 Webappの状況を確認してみましょう。

 

//herokuのプロセス状況を確認
herokups -a <アプリ名(my-tom-20190128)>

https://my-tom-20190128.herokuapp.com/index.jsp

https://my-tom-20190128.herokuapp.com/hello

 

こんな感じで表示されたら、OKですよ!

【パスワード解除されたくない!】excelのvbaマクロを完全にプロテクトする方法

$
0
0

エクセルで作成したツールを配布するにあたり、できればVBAのマクロのソースは、見えないようにプロテクトしておきたいなーと思って、

いろいろ調べたんですが、意外に、ソリューションが少なかったです。

昔は使えていたけど、OfficeやWindowsのバージョンが上がって使えなくなっているものもたくさんあったので。。

 

エクセルなどのVBAソースを保護(プロテクト)するには、VBAのプロジェクトにデフォルトでついている機能で、パスワードで保護する方法もありますが、いろんなサイトで、そのパスワードを解除する方法が出回っているので、その方法だと、簡単に解除できてしまいます。

 

そのため、それ以外の方法をあちこち調べて、ようやく使える方法を2つばかり見つけたので、メモしておきます。

 

実際のソリューションに移る前に、そもそもVBAのソースを見えないように保護するには、デフォルトとは別の解除が難しい方法でロックをかける方法と、たとえソースを見れる状態にされたとしても人が読んで分からないように、変数名を変更したりインデントを無くしたりする難読化(Obfuscator)という方法があります。

 

フリーでなんとかする場合

excel-pratiqueというサイトのサービスを使う。

 

fuzoku plug

 

この方法は、最初のは無料のWebサービスを使う方法です。

自分でVBAのソースをコピペーして、変換すると、難読化されたソースが生成されるので、それをまた、VBAのプロジェクトに戻すという方法です。

オリジナルのエクセルファイルを残しておかないと、ソースの修正がしづらいので、ソースを修正する場合は、オリジナルのソースを修正してから、リリース用のエクセルに、難読化したソースを戻すといったような2重管理が大変です。

ただ、無料で使えるサービスなので、それほど頻繁に使わない場合はこちらでもいいと思います。

 

難読化&プロジェクトをパスワードでロック

いろいろフリーのソフトを探したのですが、いいものは見つけられませんでした。

そのため、私は、こちらの有料のソフトを購入しました。

Windowsの64bitでも、比較的新しいOfficeでも使用できるソフトは、この「VBASH」が一番だと思います。

 

fuzoku plug

 

このソフトは、エクセルやワードなどのVBAマクロのプロジェクトをパスワードでロックできます。

Officeにデフォルトでついているパスワードロックとは異なりますので、一般にネットに出回っている方法では解除できないので、安心度が上がります。

また、難読化も可能で、「パスワードロック」、「難読化」、「その両方」といったように、プロテクトの方法も選べます。

やり方も、VBASHで、対象のファイルを開いて、プロテクトの方法を選択してボタンを押すだけですし、元ファイルは残ったままで、処理後のファイルができますので、ファイル管理の手間も少なくなります。

そのため、定常的にプロテクト→リリース(配布)という作業がある場合は、このソフトを使った方がいいと思います。

 

ただ、私の場合は、難読化も行うと難読化しすぎて?うまく動かなくなったので、ロックだけを使っています。

実際に使う際は、上記ソフトのサイトにお試し用のデモ版ソフトが置いてあるので、自分の環境できちんと使えるを確認してからこうした方がいいと思います。

Dataloaderでsalesforceの「ファイル」を一括アップロードする方法

$
0
0

SalesforceもLightningに変わってきて、ファイルも、以前の「ドキュメント」ではなく「ファイル」を使うことが多くなってきました。

このファイル、自分でアップロードして自分で確認するには特に問題ないのですが、自分があげたファイルを他の人に見てもらう場合には、「権限」を付与してあげる必要があります。

で、1つ2つならいいですが、ファイルを大量にアップする場合には、どうしたらいいでしょうか?

今回は、そのやり方をご紹介します。

 

Dataloaderを使って、ローカルPCにあるがファイルを一括で、権限付きでアップロードする方法

「ファイル」のSFDCオブジェクトは「ContentVersion」です。

なので、基本的にはそのオブジェクトに対してDataloaderでローカルファイルをアップロードできます。

また、「ファイル」には「ライブラリ」といわれる、権限の管理とセットになった概念があります。

見た目上は「ファイル」配下に作成したフォルダのようで、フォルダ同様、その中に入れたファイルはそのライブラリに設定した権限を引き継ぎます。

 

 

そのため、アップロードファイル全部に適切な権限を付与した状態にするには、

 

  • ライブラリを作成
  • そのライブラリに権限を付与
  • そのライブラリに対してファイルをアップロード

 

という手順を踏むと良いです。


これを、Dataloaderで行うには、「ContentVersion オブジェクト」の項目にある「FirstPublishLocationId」にライブラリのオブジェクトIDを指定してあげます。

 

ライブラリのオブジェクトIDの調べ方

ライブラリは「ContentWorkspace」オブジェクトですので、SFDCの開発者コンソールから以下のようなSOQLを発行すると、IDが取得できます。(以前の記事に書いたWorkbenchを使うと便利です)

 

SELECT Id,Name,CreatedDate,Description FROM ContentWorkspace

 

取得したオブジェクトIdを「FirstPublishLocationId」にセットしたCSVファイルの用意

 

"TITLE","DESCRIPTION","VERSIONDATA","PATHONCLIENT","FirstPublishLocationId"
"AAAA","This is AAAA","D:\sample\AAAA.png","D:\sample\AAAA.png","058p00000002zzzXXX"

 

このように用意したCSVファイルをDataloaderで読み込んで、insertすれば、ファイルをアップロードできます。

salesforceでデータの変更履歴を追跡する方法と注意点

$
0
0

Salesforceでは、標準オブジェクトとカスタムオブジェクトのレコードに変更を加えたときに、その前後でデータがどのように変わったかを保持することが出来ます。

ClassicでもLightningExperienceでも、設定するだけで簡単に追跡ができます。

特にプロファイルなどは、最新の情報しか保持していなかったりしますが、「いつ変わったのかなー」と確認したり、重要な項目で、その変更履歴を管理しなければならないときに使うことが多いです。

 

標準オブジェクトでの設定方法

 

Mavenプロジェクト1

 

「設定」⇒「オブジェクトマネージャ」で標準オブジェクトを開き、「項目とリレーション」を開きます。

すると上記のような画面になりますが、その右上の方に「項目履歴管理の設定」というボタンがあります。

これを押すと、初めてそのオブジェクトに対して設定を行う際には、以下のような画面が表示されます。↓ ↓ ↓ ↓
ここでチェックを入れて有効化しましょう。

Mavenプロジェクト1

 

すると、以下のように、オブジェクトの項目が表示されますので、追跡したい項目にチェックを入れます。↓ ↓ ↓ ↓
これで、変更履歴が追跡されるようになります。

Mavenプロジェクト1

 

カスタムオブジェクトでの設定方法

カスタムオブジェクトでも同様に追跡が設定できます。

注意!

しかし、カスタムオブジェクトの場合は、オブジェクトマネージャの詳細のところで、「項目履歴管理」という項目にチェックを入れないと、変更履歴の追跡は開始されませんし、レイアウトに表示することも出来ません

 

はじめに「項目履歴管理」にチェックを入れましょう。↓ ↓ ↓ ↓

Mavenプロジェクト1

 

その後、標準オブジェクトと同様に、「設定」⇒「オブジェクトマネージャ」⇒「項目とリレーション」から「項目履歴管理の設定」ボタンを押します。↓ ↓ ↓ ↓

Mavenプロジェクト1

 

すると、以下のようにトラッキング(追跡)できる項目を選択できます。↓ ↓ ↓ ↓
チェックを入れて保存すると、レコードを変更するたびに、変更履歴が保存されるようになります。

Mavenプロジェクト1

 

変更履歴の制限事項

SalesforceのHelpを確認すると、変更履歴には以下のような制限がありますので、使用時には注意しましょう。

  • 追跡できる項目数・・・オブジェクトごとに、標準項目とカスタム項目を最大 20 項目まで選択できます。
  • データの保持期間・・・項目履歴データは、組織経由で最大 18 か月間、API 経由で最大 24 か月間保持されます。
  • データの項目・・・255 文字を超える項目に対する変更は、編集済みとして追跡され、元の値と新しい値は記録されません。
  • 追跡できるデータの種類の制限・・・次のものは追跡できません。数式項目、積み上げ集計項目、または自動採番項目、[作成者] および [最終更新者]

 

変更履歴を表示して確認できるようにするには?

変更履歴はそのままだと表示されません。

表示して確認できるようにするには、以下の設定を行います。

①そのオブジェクトのレイアウトを編集する

②「関連リスト」として履歴が選択できるようになっているので、それを関連リストに表示させる↓ ↓ ↓ ↓

Mavenプロジェクト1

 

これで、そのオブジェクトの履歴が関連リストとして表示され、確認できるようになります。

 

履歴オブジェクトの構造について

そもそも、変更履歴のレコードは、そのオブジェクトの子オブジェクトとして作成されます。

標準オブジェクトの場合、取引先だと「AccountHistroy」、取引先責任者だと「ContactHistory」といった具合に、あらかじめ「標準オブジェクト名+History」というオブジェクトがあるので、ここに変更履歴が追加されていきます。

これがカスタムオブジェクトだと、「SampleObject1__history」のように、「カスタムオブジェクト名+History」のような命名規則でオブジェクトができ、そこに変更履歴が追加されていきます。

そのため、履歴オブジェクトをSOQLで検索するには、

 

//標準オブジェクトの場合
SELECT OldValue, NewValue FROM ContactHistory

//カスタムオブジェクトの場合
SELECT OldValue, NewValue, Parent.Id, Parent.name FROM SampleObject1__history

のように引っ張れます。

また、Historiesという名前で親オブジェクトから参照できるので、

//標準オブジェクトの場合
SELECT Name, Id, (SELECT OldValue, NewValue FROM Histories) FROM Contact

//カスタムオブジェクトの場合
SELECT Name, Id, (SELECT OldValue, NewValue FROM Histories) FROM SampleObject1__c

のようにすると、変更履歴を管理しているオブジェクトとその履歴を一緒に取得することが可能です。


Qt for Python(PySide2)をQMLで開発するための環境構築

$
0
0

Windowsだけでなく、MacやLinuxでも動くマルチプラットフォームなGUIアプリを作ろうとした場合、いくつか選択肢があります。

JavaやElectronなどもありますよね。

今回はQtというC++の開発フレームワークをPython経由で利用する方法をご紹介します。

 

Qt for Python(PySide2)の位置付け

QtをPythonから利用するには、PyQtPySideが有名です。

PySideはQtの開発元のThe Qt Companyがサポートしていますが、以前はあまり活発な開発が行われず、Qt5シリーズへの対処が遅れていました。

ただ、近年のPythonの隆盛にこたえたのか、2018年12月についに正式版としてサポートするようになり、それまでの非公式版「PySide」と区別する意味で「PySide2」と呼ばれています。

PySide2は正式には「Qt for Python」と呼ばれ、Qtパッケージの一部として公式にサポートされるようです。

 

QtのGUI開発手法の違い

さらに、Qtの見た目(GUI)の開発にも大きく2つの異なる手法があります。

1つは「Qt Widgets」と呼ばれ、「.ui」の拡張子を持つXMLファイルでGUIを定義していく方法、もう一つは、「.qml」の拡張子を持つ定義ファイルでUIを定義していく、「Qt Quick」と呼ばれる方法です。

「Qt Widgets」よりも「Qt Quick」の方が柔軟でモダンなUI構築が可能なため、本記事では「Qt Quick」を使った方法でのアプリ作成について書いていきます。

 

Pythonのインストールと仮想環境構築

はじめにPythonをインストールします。

今回はWindowsで環境構築を行いました。

使うPythonのバージョンですが、3.5以上推奨で、Macは3.6以上推奨なので、python3.6を使うことにしましょう。

Anacondaなどを使ってもいいと思いますが、今回は「https://www.python.org/」ここからpython3.6をダウンロードしてインストールしました。

インストールが終わったら

//venvで仮想環境の構築
python.exe -m venv env_python36

などのコマンドをコマンドプロンプトから入力し、適当なディレクトリに仮想環境を作ります。

 

また、このタイミングでPySide2もインストールしておきましょう。

//PySide2のインストール

cd \env_python36\Scripts
activate.bat
cd ..
pip install PySide2

 

開発環境「PyCharm」と「Qt Creator」の用意

開発しやすい環境を作るために、pythonのIDEである「PyCharm」と、QtのGUIのIDEである「Qt Creator」をインストールします。

「PyCharm」はココから、「Qt Creator」はココからダウンロードしてインストールしましょう。

 

PyCharmは特に注意点もないので、そのままインストールします。

 

「Qt Creator」の方はいくつか注意ポイントがあります。

まず、ダウンロードするファイルですが、下記のように「Open Source」の方を選べばOKです。

 

fuzoku plug

 

そして、ダウンロードしたファイルをインストールする時も、注意します。

 

以下のように、何をインストールするか選ぶ画面が表示されますが、

  • Qt5.12.3
  • CDBdebugger
  • MinGW

を選択しました。

「Qt5.12.2」と「Qt5.12.3」がありますが、どちらか必要な方だけでよいと思います。

何せ、40Gくらいの容量を占めるので。。

 

fuzoku plug

 

pythonのプロジェクトを作成

ではいよいよ、プロジェクトを作成して、実際にGUIアプリを動かしてみましょう。

まずは、QMLを使わず、シンプルなGUIアプリをpythonで表示させられるかを確認しましょうね。

 

venvのフォルダの下にprojectsフォルダを作りました。ここに、「QtProject1」という名前のプロジェクトを作っていきます。

PyCharmを起動し、新しくプロジェクトを作りましょう。

 

fuzoku plug

 

プロジェクトの設定で気を付けたいのは、interpreterの設定です。

pythonを実行させる際、ここで設定したinterpreterが使用されますので、作成したvenvのpythonを指定していないと、パスが通っていなかったり、Qtのコンポーネントが読み込まれなかったりといった不具合の原因になります。

 

fuzoku plug

 

では、ちゃんとインストールされ、環境も構築できていることを確認するために、以下のソースをmain.pyという名前で作成します。

main.py

import sys
from PySide2.QtWidgets import QApplication, QLabel
                                                     
if __name__ == "__main__":
    app = QApplication(sys.argv)
    label = QLabel("Hello World")
    label.show()
    sys.exit(app.exec_())

 

fuzoku plug

 

上記のように、Hello World! のフォームが表示されたらOKです。

何かエラーが出る場合は、このプロジェクトの設定で使用しているpythonが、始めにPySide2をインストールした環境(venv)のものではない可能性が高いので、確認してみましょう。

 

QMLを使ったGUIの作成

では次に、QMLを使ったGUIを作ってみます。

QMLの画面をデザインするには、Qt Creatorが便利なので、それを使います。

 

Qt Creatorを起動して、新しいプロジェクトを作成します。

 

fuzoku plug

 

次に、テンプレートとして「他のプロジェクト」⇒「Qt Quick UI Prototype」を選択します。

fuzoku plug

 

プロジェクトのパスは、projects配下にします。

先ほどPyChramのプロジェクトで作成した名前と同じ名前にすると、同じディレクトリにqmlファイルが作られるので便利です。

fuzoku plug

 

最小のQtバージョンを選んで、fuzoku plug

 

キットを選択すると。。fuzoku plug

 

以下のようなシンプルなGUIのqmlファイルが作成されます。

後程、これを元に、複雑なアプリを作っていくことになりますが、まずはこれで動作確認してみましょう。fuzoku plug

main.pyを以下のように変更します。

 

import sys
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QUrl

if __name__ == '__main__':
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.load(QUrl("QtProject1.qml"))

    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())

 

以下のような白い画面が表示されたら、QMLファイルを読み込んでのアプリ起動に成功しています。

fuzoku plug

 

 

いかがでしたか?

少し手間ですが、最初にこの環境を構築しておくと、複雑なアプリを作るときでも、QtCreatorを使ってGUI開発して、PyCharmで作成したpythonファイルと連携を取りながら開発していけます。

 

では、次回は、作成したアプリを配布するために.exeにする方法をご紹介します。

特にリソースファイルを同梱するテクニックは、実際のアプリを開発して配布する場合には必須と言っていいテクニックなので、ぜひ、マスターしてください。

QMLやアイコンなどのファイルもリソースとしてpythonアプリの実行ファイル形式(exe化)に含める方法

$
0
0

前回はQMLファイルを使ったpythonによるGUIアプリの作成手順を解説しました。

前回の記事 ⇒ Qt for Python(PySide2)をQMLで開発するための環境構築

今回は作成したアプリを配布する際の事を考えてみます。

配布の際には、作成したpythonコードをWindowsであればexe、Macであればapp形式などに変換するとpythonをインストールしていない人でも動かすことができるので便利です。

これらの実行形式に変換するには、pyinstollerやcx_Freeze、py2exeなどが使えますが、実際のやり方はほかの記事に譲るとして、やってみるとひとつ重大な問題があることが分かります。

QMLを使ったプロジェクトを実行形式にして起動してみると、表示されない。。。

どうやらQMLファイルの読み込みに失敗しているようです。

つまり、実行形式の中にQMLファイルを含められていないということですね。これは、アイコンなどの画像ファイルについても同じことが言えます。

 

この記事では、それらのファイルも実行形式に含めて配布できるようにするにはどうしたらいいかを解説します。

 

リソースファイルをpyファイルにして埋め込めばいい

この問題に対するソリューションとしては、

リソースファイルを.pyに変換してしまえば、自然に実行形式にも含まれるし、そのファイルを使うのも、import文でインポートすればいい

というものです。

PySide2にはpyside2-rccという、リソースファイルを.pyファイルに変換するツールが付属していますので、それを使うことにしましょう。

 

はじめに、「pyqt5_qml.qrc」など、.qrcという拡張子の定義ファイルを作成し、この中にリソースを記述していきます。

 

リソース記述例(pyqt5_qml.qrc):

<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix = "qml">
    <file>QtProject1.qml</file>
    <file>QtProject2.qml</file>
</qresource>
</RCC>

fileのタグにqmlやアイコン用ファイルを追加していきます。

prefix属性を使うと、フォルダ分けのように、種類の異なるファイルをまとまりで管理できます。

 

リソースの定義ができたら、それをpyside2-rccで.pyファイルに変換します。

-0オプションで変換後のファイル名を指定しますが、慣例として、pyqt5_qml.qrc⇒pyqt5_qml_qrc.pyのように.qrcを_qrcにして.pyを付けるとわかりやすいです。

 

//pyside2-rccはsite-packageの下に入っている
//以下はpyqt5_qml.qrc⇒pyqt5_qml_qrc.pyの例

site-packages\PySide2\pyside2-rcc.exe -o pyqt5_qml_qrc.py pyqt5_qml.qrc

 

 

.pyファイルに変換したら、importすればpyファイルの中で使用できます。

前回の記事のQMLを使ったアプリのソースの中で使うとしたら、以下のようになります。

 

import sys

import pyqt5_qml_qrc

from PySide2 import QtCore
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine


if __name__ == '__main__':
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()

    for x in QtCore.QDir(':qml').entryList():
        print(x)

    engine.load(QtCore.QUrl('qrc:/qml/QtProject1.qml'))

    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())

 

少し解説すると、

import pyqt5_qml_qrc  で、.py化したリソースを読み込んで、

qrc:/qml/QtProject1.qml で使っていますよね。「qml」がprefixに対応していることが分かります。

少し上のprint(x)分では、読み込んだリソースを出力しています。確認用のデバッグなので、必要ない人は消しても大丈夫です。

 

以上で、リソースファイルを配布時にも実行形式に含めることができるようになりました。

次回はいよいよ、作成したアプリを実行形式にして配布し、みんなに使ってもらうことに挑戦しましょう!

 

 

pythonアプリの単一実行ファイル(app,exe化)を作って配布する方法

$
0
0

前回まで、QMLを使ったpythonアプリの作り方や、そのアプリにリソースファイルを埋め込む方法について解説してきました。

元々、pythonでGUIアプリを作る目的として「マルチプラットフォーム」で、一回、ソースを書けば、同じソースからWindows、Mac、Linuxにアプリを配布できることをメインにしていたので、いよいよ、最後の実行形式のファイルを作る工程になります。

作成したアプリを配布する際に、使ってもらう人に、指定したバージョンのpythonをインストールしてもらって、pipでライブラリも用意してもらって。。。なんて、いちいちやってもらえないですよね。

実行ファイル形式にすると、pythonの実行環境とライブラリをまとめることができるので、そんな準備をしてもらわなくても、作成したアプリをどこかのディレクトリに置くだけで実行してもらえます。

 

ちなみに、前回までの記事はこちら ↓ ↓ ↓

Qt for Python(PySide2)をQMLで開発するための環境構築

QMLやアイコンなどのファイルもリソースとしてpythonアプリの実行ファイル形式(exe化)に含める方法

 

さて、実行ファイル形式を作るためもいくつか方法がありますが、それぞれ特徴があるので、どのように配布したいかによってどれを選ぶかも変わってくると思います。

私がいくつか試したうちWindowsにもMacにも「使えるな」と思ったのは「pyinstaller」と「cx_Freeze」の2つでした。

 

それぞれの特徴は以下のような感じです。

pyinstaller・・・かなり活発に開発されている。シングル形式(一つのファイル)でも実行ファイル形式を作れるので、配布にも便利。作成したファイルを起動するのが少し遅い(10秒程度)。

cx_Freeze・・・シングル形式の実行ファイル作成には対応していないのが残念。ただ、起動が速いexe、appを作れる点は良い。

 

pyinstallerでのexe化手順

pyinstallerでexe化するには、まず、pipでpyinstallerをインストールします。

 

pip install pyinstaller

 

で、プロジェクトのフォルダに移って、

 

pyinstaller main.py --onefile --noconsole

 

と実行すればOKです。

オプションの意味ですが、「–onefile」は1つの実行ファイル形式にまとめるオプション、「–noconsole」は、コンソールなしでアプリを立ち上げるオプションです。このオプションが無いと、アプリを起動したときにコマンドプロンプトも起動されます。

さて、このままエラーなく作成が進むと、\<プロジェクトフォルダ>\distに、「main.exe」ができます。

また、同時にプロジェクトフォルダにmain.specもできますが、これは実行ファイルを作るときに使われたオプションなので、次回から「pyinstaller main.spec」でもexeが作成できます。

細かいオプションはこのファイルに指定するのもメンテしやすいと思います。

 

通常はこのまま配布できますが、Qt for Pythonのアプリをpython3.6で実行ファイル形式にすると、エラーが出てしまいました。

幸い、ココで議論されていて、ココにパッチされたソースがありますので、これを使うと、エラーなく実行ファイル形式にできました。

 

cx_Freezeでのexe化手順

pyinstallerだとやっぱり起動時間がかかるのが気になる、、という場合は、cx_Freezeでexe化してもいいと思います。

シングルファイルにはできませんが、UPXなどのexeファイルを実行可能な形式で圧縮するソフトを使うと、1ファイルで配布できます。

圧縮されるので、実行時に解凍される分、若干時間がかかりますが気になるほどではありませんでした。上記のpyinstallerと比較してみると良いと思います。

 

さて、cx_Freezeのインストールにもpipを使います。

pip install cx_Freeze

 

でインストールしたら、「setup.py」というファイルを作ります。

setup.py

import sys
from cx_Freeze import setup, Executable

base = None

if sys.platform == 'win32':
    base = 'Win32GUI'
# CUIの場合はこのif文をコメントアウトしてください。

exe = Executable(script = "main.py", base= base)
# "main.py"にはpygameを用いて作成したファイルの名前を入れてください。

setup(name = 'your_filename',
    version = '0.1',
    description = 'converter',
    executables = [exe])

 

作成したら、以下のコマンドでexe化できます。

 

python setup.py build

 

まとめ

いかがでしたか?3回にわたってpythonで実用的なGUIアプリを作って配布する方法をご紹介してきました。

pythonは人気の言語で、AIやVRなどのライブラリも豊富です。ぜひ、楽しくて役に立つアプリをたくさん作って広めてください!

VisualStudioCodeとSalesforceCLIでIDE開発を行う手順

$
0
0

以前使われていた「Force.com IDE」のサポートが公式に終了することになったり、MavensMateも開発終了ということで、「Salesforceで開発を行うときにはどのIDE(統合開発環境)を使えばいいのか?」と悩んでいる方も多いと思います。

また、Salesforceの開発手法もDXといわれる形式に徐々に変わってきていますし、近い将来も見据えて、IDEの選択を行いたいところですよね。

 

VS Codeは使い勝手はどうか?

最近いろいろな開発環境の中で使いやすく、カスタマイズしやすいと評判なのがVisualStudioCodeです。

また、今後、Salesforceでの開発がDX形式になっていくにあたり、重要なツールとなるのがSalesforceCLIですね。

VSCodeには、このCLIとの連携がスムーズにできる公式の機能拡張がSalaesForce社からリリースされており、今後、統合開発環境の主流はVSCodeに移っていくのではないかと思います。

そこで今回はVisualStudioCodeを使ってSalesforceの開発を行うための環境構築の手順をまとめてみました。

インストールと環境設定

SalesforceCLIのインストール

VSCodeでは、Salesforce開発に必要なさまざまな作業を、SalesforceCLIを使ったコマンド経由で行いますので、SalesforceCLIのインストールが必須です。

始めにこれをインストールしておきましょう。

ここからダウンロードできます。

 

jdk8のインストール

いくつかのVSCode機能拡張の機能はJSDK8を使いますので、インストールしておきましょう。

もし、お使いの環境に複数のjdkのバージョンが混在している場合は、VSCodeのユーザ設定の

「salesforcedx-vscode-apex.java.home」にJava8をインストールしたディレクトリを指定しておきます。

 

VSCodeのインストールとセットアップ

もちろんVSCodeをインストールしておく必要があります。

機能拡張はVSCodeのv1.26以上が対象なので、このバージョン以上のVSCodeをインストールしておきます。

さて、開発にあたり、いくつか、セットアップしておいた方がいい機能拡張と設定がありますので、以下に記載します。

公式機能拡張のインストール

https://forcedotcom.github.io/salesforcedx-vscode/

VSCodeでSalesforce開発をするなら必須の公式機能拡張です。

DevHubやスクラッチ組織にアクセスする機能もありますので、インストールします。

 

package.xmlジェネレータのインストール

https://marketplace.visualstudio.com/items?itemName=VignaeshRamA.sfdx-package-xml-generator

これは公式の機能拡張ではありませんが、既存のSalesforce組織からpackage.xmlを生成します。

このpackage.xmlの情報をもとに、Salesforcec側にあるApexソースやトリガ、レイアウトなどをローカルのPCに取得して開発を行いますので、あると便利です。

 

プロキシ背後で開発する場合

開発するところがproxyの背後にある場合は、プロキシの設定を行います。

特に、VSCodeのコマンドパレットやターミナルからSFDCへのログイン系のコマンドを打ちこんだ時、「localhost」にコールバックするのですが、この設定がないとエラーになってログインできません。

設定はWindowsのシステム環境変数に以下を設定し、PC再起動でOKです。

HTTP_PROXY・・・<サーバ>:<ポート>

HTTPS_PROXY・・・<サーバ>:<ポート>

 

VSCodeでのプロジェクトの作り方

新規に、既存のSFDC組織用プロジェクトを作成

VSCodeのコマンドパレットを開き、テキストボックスに「Create Project」と入力し「SFDX: Create Project with Manifest」を選択。

すると、プロジェクトフォルダが生成され、もろもろのファイルも生成されます。

とくに、「manifest/package.xml」も自動で生成されます。

ただし、package.xmlの中にはそれほど多くのコンポーネントの記述はないので、次の手順で適宜追加します。

 

VSCodeのTerminalを開いて、既存組織にログインする。

以下のコマンドをVSCodeのターミナルから入力し、SFDCにログインします。

sfdx force:auth:web:login --setalias <組織のエイリアス名> \
</ br>--instanceurl https://login.salesforce.com --setdefaultusername

 

「SFDX Package.xml Generator」でpackage.xml情報を取得

コマンドパレットを開き、テキストボックスに「SFDX Package.xml Generator」と入力し「SFDX Package.xml Generator: Choose Metadata Components」を選択します。

fuzoku plug

 

 

すると、どのコンポーネントを取得するかの選択画面が表示されるので、チェックボックスで選択します。

すると、package.xmlに選択したコンポーネントの情報がアップデートされます。

ちなみにこの時点ではまだ、コンポーネント自体はダウンロードされていませんので、次の手順でコンポーネントをローカルPCにダウンロードします。

 

コンポーネントを取得

package.xmlを右クリックし、「SFDC: Retrieve Source in Manifest from Org」を選んでコンポーネントを取得します。

fuzoku plug

 

dockerイメージの検索とタグ一覧の取得、使い方の確認方法

$
0
0

dockerは、公式のリポジトリにさまざまなイメージが置かれていて、それらの中から、使用用途に合ったイメージをpullして使うことが出来ます。

ただ、数がたくさんあるのと、それぞれのイメージがTagと呼ばれるバージョンを持っていることで、目的に合ったイメージを見つけるのが大変です。

また、コンテナ化されていて、「どのような初期設定でイメージがつくられていて、どのように使えばいいか」が分かりにくいですよね。

ためしに動かしてみるだけなら、どこかのサイトに書いてあったコマンドを打ってみればいいですが、実際に開発に使うにはちょっとした設定変更やリビルドなどが必要になってきます。

そこで今回は、そんなときに使えるTipをご紹介します。

 

search コマンドの使い方とオプション フォーマット

始めに、dockerのターミナルから使えるコマンドです。

コマンドのフォーマット

docker search [オプション] [ キーワード ]

のような使い方で検索出来ます。

すると、以下のように検索結果が表示されます。

 

docker search

 

使い方の実例

例えば、mysqlのイメージを検索するには、以下のようにします。

docker search mysql

 

オプションの使い方ですが、例えば、★3つ以上で、公式のイメージのみを検索するには、以下のようにコマンドを入力します。

docker search --filter "stars=3" --filter "is-official=true" mysql

もっと詳しい使い方は、公式のコマンドリファレンスをご参照。

 

 

イメージの検索と初期設定、使い方の確認

上記のコマンドだけだと表示される情報が少ないので、初めて使うイメージだと、よく分からないですよね。そもそもどんなイメージで、なにが出来るのか、どんな初期設定なのか、どんなオプションがあるのか、どんなTAGがあるか、、、、などなど。

これらを確認する方法をご紹介します。

 

イメージの検索と内容の確認

DockerHubの公式サイトに行くと、イメージの検索を行うことが出来ます。

画面上部の赤枠のところに検索したい文字列を入力してEnterを押します。

 

docker hub

 

すると、以下のように検索結果が表示されます。

docker hub

 

この中のひとつをクリックすると、そのイメージの詳細を確認することができますよ。

ここでは、環境変数(Environment Variables)など、どのようにカスタマイズするかとか、docker-composeでの記述方法など、そのイメージを有効活用するためのいろいろな情報が載っているので、ぜひ活用しましょう。

docker hub

 

タグ一覧の取得

上記の詳細ページですが、Tagが載っているイメージとそうでないイメージがあります。詳細説明欄にTag名を入れるか入れないかは任意のようですね。

これだと、タグ指定でイメージを取得したい場合に困るので、Tagの一覧を確認する方法です。

そのイメージにどのようなTagが存在しているかを確認するには、ブラウザで以下のようなURLを入力するとOKです。

https://registry.hub.docker.com/v1/repositories/mysql/tags
上記で言うと「mysql」のところがイメージになっているので、使いたいイメージ名に変更して使ってください。
https://registry.hub.docker.com/v1/repositories/<イメージ名>/tags

すると、こんな感じでjson形式でTag名のリストが返却されます。

docker hub

 

 

※後日記載

詳細ページの「Tag」タブというところに載っていました。ここで参照できますね。

docker hub

Viewing all 247 articles
Browse latest View live