シェルスクリプトをデバッグするには プログラムにバグはつきものであり、それはシェルスクリプトも例外ではない。bash にはシェルスクリプトのデバッグに非常に有効なオプションが用意されているので、「Syntax Error」で実行できない場合や、変数にどんな値が設定されているのか確認したい場合は、それらオプションを指定した上で実行することで、簡単にデバッグを行うことができる。 「-x」オプションを使用する -x オプションは、シェルスクリプト内で実際に実行されたコマンドを表示するオプションである。変数が使用されている場合は、その変数の値が展開された状態で表示される。 bash -x デバッグするシェルスクリプト → bash に -x オプションを指定し、引数にデバッグするシェルスクリプトを指定する。 -x オプションでシェルスクリプトを実行すると、echo コマンドなどの出力に加えて、スクリプト内で実際に実行されたコマンドラインが出力される。この出力により、変数に設定されている値などを確認することができる。 また、この場合は bash を使用しているが、Bシェルで実行される場合は sh を、Kシェルで実行される場合は ksh をそれぞれ使用する。 変数に値を設定するのみのシェルスクリプト () を作成して、 -x オプションでの実行結果を見てみる。 #! /bin/bash var1 = ` date +%M ` var2 = ` ls -1 | wc -l ` if [ $var1 -ge 30]; then var3 = "BIG" else var3 = "SMALL" fi exit 0 このシェルスクリプト の -x オプション付き実行結果は、以下のとおりとなる。 $. / $ #↑通常通りに実行すると、何も出力されずに終了する。 $ bash -x. シェルスクリプトのデバッグ | UNIX & Linux コマンド・シェルスクリプト リファレンス. / ++ date +%M + var1=46 ++ ls -1 ++ wc -l + var2=26 + '[' 46 -ge 30 ']' + var3=BIG + exit 0 #↑「-x」オプション付きだと、実際に実行されたコマンドと変数に設定された値を確認できる。 行頭に + が付いているコマンドがシェルスクリプト内で実行されたコマンド、 ++ は `` (バッククォート) 内で実行されたコマンドとなっている。 通常の実行では変数に設定される値を確認できないが、 -x オプションを使用すると実際に実行されたコマンドが出力される。これを見ることで実行時に変数に設定された値を確認することができる。 実行時に -x オプションを指定する以外にも、シェルスクリプト内に直接オプションを記述することでも同様の効果を得ることができる。 実際にシェルスクリプト () 内で -x オプションを指定してみる。 #!
/ -d など)、この方式だとメイン処理で使用したいオプションと被ったり、引数チェックが複雑になったりと、デメリットばかりが大きかった。デバッグ用ログファイルの存在自体をデバッグフラグとする方式だと、そのようなデメリットは一切なく、簡単にデバッグモードで実行することができる。 このデバッグ用関数を使用したシェルスクリプト () を作成してみる。 # デバッグ用ログファイルの設定 readonly _DEBUG_LOGFILE_ = ". /" DEBUG_LOG " $LINENO: デバッグを開始します。" DEBUG_LOG "コマンド実行結果も出力できます。\n`cal`" # パイプ処理の途中にも組み込み可能 cal | grep 15 | DEBUG_LOG | awk '{print $3}' DEBUG_LOG " $LINENO: デバッグを終了します。" シェルスクリプト中で使用している変数 LINENO は、使用した場所の行番号が自動的に設定される特殊変数である。デバッグ作業には非常に有効な変数なので、ぜひ覚えておいてほしい。 $ ls. / /bin/ls:. / そのようなファイルやディレクトリはありません #↑デバッグ用ログファイルが存在しないので、非デバッグモードで動作するはず。 12 #↑正常に結果が出力されている。 #↑デバッグ用ログファイルには出力されいてない。 $ touch. スクリプトのデバッグ. / #↑今度はデバッグ用ログファイルを作成し、デバッグモードで動作させる。 #↑デバッグモードでも実行結果は変わらない。 #↓デバッグ用ログファイルにはログが出力されている。 $ cat. / --- 2007/06/05 23:00:19 -------------------------------- 33: デバッグを開始します。 コマンド実行結果も出力できます。 6月 2007 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #↑これがパイプ処理の途中の値になる。 40: デバッグを終了します。
こんにちは、ライターのマサトです! 今回は、JavaScriptでデバッグを行うためのさまざまな手法についてまとめて学習をしていきましょう! この記事では、 「デバッグ」とは? 「デバッグ」の方法 consoleオブジェクトについて 開発者ツールのデバッグについて という基本的な内容から、応用的な使い方に関しても解説していきます。この記事で、デバッグ手法をしっかり学習して自分のスキルアップを目指しましょう! それでは、まず最初に「デバッグ」について基本的な知識から学習を進めていきましょう。そもそも「デバッグ」とは何かをご存知でしょうか? デバッグは、基本的にプログラムの間違いをさまざまな方法で事前に発見して修正することを指しています。幸いにもJavaScriptの実行エンジンはブラウザ内にあるので、便利なデバッグツールがあらかじめブラウザに搭載されています。 もちろん、JavaScriptでデバッグ用のプログラムを記述することも可能ですが、ブラウザのデバッグツールと連携するのが基本です。本記事では、JavaScriptコードとデバッグツールの両面において基本的な知識を学べるように構成しているのでぜひ参考にしてみてください! この章では、 基本的なデバッグ方法 について見ていきましょう。主に、ブラウザの開発者ツールの使い方、ブレークポイントの設定、Consoleオブジェクトの基本について学んでいきます。 Chrome開発者ツールについて まずは、最も基本となるブラウザのデバッグツールについて見ていきましょう。本章では利用者の多いChromeブラウザを元にして解説しますが、FirefoxやEdgeブラウザでも類似のツールが提供されています。 使い方は簡単で、設定メニューから「デベロッパーツール」をクリックするだけです! 【Google Apps Script(GAS)】ブレークポイントの設定とデバッグ実行(GAS入門). 「Ctrl」+「Shift」+「I」のショートカットキーでも起動することができます。「Elemetns」タブを見ると現在見ているWebサイトのソースコードやスタイルの詳細を確認することができます。 コードやスタイルはリアルタイムに変更可能なので、ちょっと試しに実験するには最適でしょう。(画面を更新すると元に戻ります) また、「Console」タブをクリックしてみてください。 今はまだ何も出力されていませんが、ここへJavaScriptのConsoleオブジェクトを使ったデバッグの実行結果が表示されるようになります。そのため、JavaScriptのデバッグは基本的にこの「Console」タブを見ながら行う作業が多いわけです。 コンソールログによる基本的なデバッグ方法 それでは、実際に 「Console」タブを使った基本的な方法 を見ていきましょう。JavaScriptにはデバッグに便利な「Consoleオブジェクト」があらかじめ提供されています。 例えば、「()」を利用すると引数に設定した値を「Console」タブの画面に出力することが可能です。次のサンプル例を見て下さい!
for(var i=0; i<5; i++) { (i);} この例では、単純なfor文を使って初期値「i」を()の引数に指定しています。これにより、for文がループする度に「i」の値が以下のように出力されるわけです! 変数「i」の中身がどのように変化しているのか一目瞭然ですね。もっと複雑な計算処理をしている場合などは、この方法は効果的でしょう。 ブレークポイントの使い方 先ほどは「()」を使って変数の値を確認しましたが、さらに効果的なデバッグ方法もあるのでご紹介しておきます。単純に変数の中身だけを追っていきたいのであれば「ブレークポイント」を利用するのがオススメです。 ブレークポイントは、コードの一部分を指定することで処理をそこでストップさせることができます。繰り返し処理や複数の関数を呼び出しているような場合に有効で、コードが意図した通りに進んでいるかをチェックできます。 方法は簡単で、まず最初に「Sources」タブを開いて一時的にストップさせたい箇所の行番号をクリックします! そして、ブラウザの更新ボタンをクリックして画面を再度表示させてみましょう。すると、ブレークポイントの箇所でプログラムが一時的にストップしているのが分かります。 あとは、「ステップ実行」ボタンをクリックする度に処理が1ステップずつ実行されていきます。また、変数の中身を確認する際に画面右側の「+」アイコンをクリックして変数名を設定してみましょう。 すると、処理が実行されていく過程で変数「i」の中身がリアルタイムに出力されていくのです! このようにブレークポイントを活用すれば、デバッグの効率化が見込めるのでぜひ参考にしてみてください。 Consoleオブジェクトについて 冒頭で「()」を使いましたが、Consoleオブジェクトにはデバッグに活用できるメソッドがたくさんあります。なかでも一般的なデバッグで多用するメソッドの一覧は以下の通りです。 メソッド名 内容 () 任意の値を出力する コンソール画面をクリアにする エラー情報として出力する(他に、info() / warn()もあり) インデントを付けて出力することで階層構造を持たせる(groupEnd()で終了する) time()〜timeEnd()までの間にある処理を計測する 呼び出し元などを記録した実行過程を出力する 実行する度にカウントアップして回数を出力する 配列やオブジェクトなどの構造をテーブル表にして出力する オブジェクトが持つプロパティの一覧をリストで出力する 変数の中身や処理の流れを追っていくメソッドが基本となります。ただ、「()」は処理に掛かる時間を計測してくれるメソッドで、これはプログラムの最適化を行うのに便利なので覚えておきましょう!
12月になり、外もだいぶ寒くなってきましたね。 冬は多肉に水をあげすぎると根腐れしてしまうので、最近は多肉おさぼり系エンジニアのほりです。 はじめに 今日はインラインスクリプトのデバッグ方法についてご紹介したいと思います。 インラインスクリプトはブラウザもキャッシュしないので、あまり推奨してないとは思うのですが、何だかんだデバッグする機会って結構あると思うんです。そこで、今回はおすすめのデバッグ手法を2点ほど紹介したいと思います。 デバッグしてみよう! 今回使用するブラウザは Google Chrome 78. 0. 3904. 108(Official Build)で、デバッグには DevTools を利用します。今回すぐにデバッグお試しいただけるよう codepen にサンプルコードを用意しました。 See the Pen VwYYyVZ by Naoya Hori ( @wwnhori) on CodePen. 注目していただきたいのは、以下の箇所です。 上記の //# sourceURL ディレクティブを利用することで、インラインスクリプトをあたかも外部スクリプトのように扱うことができます。インラインスクリプトが複数に分かれている場合でも、それぞれ記載すれば別々の外部スクリプトとして扱うことができます! Google Chrome でサイトを閲覧している場合は今すぐこのページで試すことができます! まず、 F12 で DevTools を開いていただき、 Ctrl + P でコマンドウィンドウを開いて 「welcome」 と入力してみてください。 見えてきたでしょうか… 見事に外部スクリプト化に成功していますね! そのまま DevTools を開いたまま、 codepen の画面に戻って「click me」ボタンをクリックしてみてください。 今度は debugger というところでブレークポイントが止まりましたね! そう、DevTools を開いている状態で debugger ステートメントを通過するとブレークポイントの役割を果たしてくれます! まとめ ・script タグ内に //# sourceURL ディレクティブを入れることで、外部JSとして扱ってデバッグ可能となる ・debugger ステートメントを利用することでブレークポイントを仕掛けることができる 他にも「こんなテクニックもあるよ!」というのがあれば、是非おしえてください!
わるい人や物が世にはびこると、よい人や物が世間の片隅におしやられてしまうたとえ。 由来 悪質な貨幣が流通するようになると、良質な貨幣は貯蔵され、悪質な貨幣だけが市場に流通するという「グレシャムの法則」から。
(悪貨は良貨を駆逐する) まとめ 以上、この記事では「悪貨は良貨を駆逐する」について解説しました。 読み方 悪貨(あっか)は良貨(りょうか)を駆逐(くちく)する 意味 悪がはびこると善が滅びるということ 由来 グレシャムの法則で唱えられた「悪貨は良貨を駆逐する」という言葉から 類義語 憎まれっ子世に憚る、寡は衆に敵せず 英語訳 Bad money drives out good[money]. (悪貨は良貨を駆逐する) ファストブランドが台頭し、有名なブランドのデザインとよく似た商品が安く売られる時代になりました。 そのような時代でも、威厳(いげん)あるブランドは残り続けています。一方で、ファストブランドの台頭によって、売り上げが落ちてしまったブランドもあります。 「悪貨は良貨を駆逐する」時代に突入しているのかもしれません。いまいちど、お金の価値について考えてみるのもよいかもしれません。
新型コロナウイルスに関係する内容の可能性がある記事です。 新型コロナウイルス感染症については、必ず1次情報として 厚生労働省 や 首相官邸 のウェブサイトなど公的機関で発表されている発生状況やQ&A、相談窓口の情報もご確認ください。またコロナワクチンに関する情報は 首相官邸 のウェブサイトをご確認ください。※非常時のため、すべての関連記事に本注意書きを一時的に出しています。 VOA60: July 16, 2021 Transcription 1. The United States places restrictions on 7 Chinese officials for their actions against democracy activists in Hong Kong. 2. In Durban, South Africa, President Cyril Ramaphosa says security agencies will investigate those responsible for causing deadly riots this week in parts of the country. 3. In Australia, officials order people in Victoria to stay home after 24 new cases of COVID-19 are reported. 4. And the president of the International Olympic Committee visits Nagasaki's atomic bomb memorial to mark the traditional "Olympic truce" before the start of the Tokyo Summer Games. 訳例 1. 悪貨は良貨を駆逐する 会社. 米国は、香港の民主主義活動家に対する行動を理由に、中国の7人の政府関係者に規制を加えました。 2. 南アフリカのダーバンで、シリル・ラマフォサ大統領は、今週、国内の一部で起こった大規模な暴動の原因を作った者を、治安機関が調査すると発表しました。 3. オーストラリアでは、ビクトリア州で新たに24件のCOVID-19の感染が報告され、当局は住民に自宅待機を命じました。 4.