忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【BI技術者認定試験対策】DNAの絶対ルール!「相補的な塩基対」を攻略

DNAの二重らせん構造を支える最も美しく、最も重要なルールが「塩基のペアリング」です。どの塩基とどの塩基がペアになるのか、確実に得点源にしましょう。

1. 問題:DNAの塩基対の組み合わせ

【 問題 】 二本鎖DNAにおいて、4種類の塩基(アデニン:A、チミン:T、グアニン:G、シトシン:C)は、互いに結合する相手が厳密に決まっています。この正しい組み合わせ(塩基対)はどれでしょうか?

① アデニン(A) = グアニン(G)   /   チミン(T) = シトシン(C)
② アデニン(A) = シトシン(C)   /   チミン(T) = グアニン(G)
③ アデニン(A) = チミン(T)   /   グアニン(G) = シトシン(C)
④ アデニン(A) = ウラシル(U)   /   グアニン(G) = シトシン(C)

2. 正解:塩基の相補性に関する正解

正解: ③ アデニン(A) = チミン(T) / グアニン(G) = シトシン(C)

3. 解説:鍵と鍵穴の関係(相補性)

DNAの2本の鎖は、ジッパーの歯が噛み合うように、特定の塩基同士が水素結合によって引きあうことで綺麗な二重らせんを作っています。この性質を「相補性(そうほせい)」と呼びます。

[ 塩基対(ベースペア:bp)のルール ]
A = T ペア:水素結合「2本」で結合します。
G = C ペア:水素結合「3本」で結合します(こちらの方が結合が強固です)。

[ シャルガフの規則 ]
・どんな生物のDNAを調べても、「Aの数とTの数は等しい」「Gの数とCの数は等しい」という法則があり、これが二重らせん発見の決定的なヒントになりました。

1. 試験のポイント: 選択肢④にある「ウラシル(U)」は、RNAにおいてチミン(T)の代わりに使われる塩基です。「DNAの問題か、RNAの問題か」で罠が仕掛けられることが多いので、問題文をよく読む癖をつけましょう。
2. バイオインフォの視点: 文字列としてのDNAデータを扱う際、片方の鎖が「5'-ATGC-3'」であれば、もう片方は自動的に「3'-TACG-5'」と確定します。プログラムでこの対面側の配列を作る処理を「相補鎖(Complementary strand)の生成」と呼び、ペアワイズアライメントやマッピングアルゴリズムを実装する際の超基本処理となります。


4. まとめ

AはTと、GはCと組む」。このシンプルなルールがあるからこそ、DNAは半分に分かれても(半保存的複製)元の情報を1文字の狂いもなく正確にコピーできます。バイオのあらゆる計算問題の起点となる知識ですので、完全に暗記しておきましょう!


PR

【Officeスクリプト入門】まとめてデータを管理する「配列」の基本と、知っておくべき型の注意点

変数や定数は1つの箱に1つのデータしか入れられませんでしたが、実務では「複数のデータをまとめて扱いたい」という場面がほとんどです。そんな時に使うのが「配列(はいれつ)」です。

今回は、配列の基本的な作り方(定義・初期化)と、Officeスクリプト(TypeScript)ならではの「型に関する重要な注意点」を分かりやすく解説します!

0. 文法:配列の型は「型名[]」で宣言する

Officeスクリプトで特定のデータ型だけを入れる配列を作るときは、型名[] という書き方をします。

  • number[]:数値だけを入れられる配列(数値配列)
  • string[]:文字列だけを入れられる配列(文字列配列)

中身を初期化(用意)するときは、値をカンマ(,)で区切って角カッコ [ ] で囲みます。

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。数値の配列を作って、その中身を出力するシンプルなサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // 数値型(number)の配列を定義して初期化する
  let scores: number[] = [80, 90, 75];
  
  // 配列を丸ごとコンソールに出力する
  console.log(scores);
  
  // 1番目のデータ(インデックスは0から始まります)を出力する
  console.log("1番目の点数:" + scores[0]);
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。

  [80, 90, 75]
  1番目の点数:80

ワンポイント・アドバイス:型を宣言しない時の重大な注意点!

Q. 配列にできる型に制限はあるの?別の型を混ぜてもいい?
結論から言うと、型をはっきり宣言(number[] など)しておけば、その型以外のデータは入れられなくなるという制限がかかります。これは安全なプログラムを書くためにとても良いことです。

しかし、もし型を省略して、最初の要素に異なる型を混ぜてしまうと、トラブルの原因になります。

注意:型を書かずに「別の型」を混ぜて初期化した場合

例えば、型を書かずに以下のように初期化したとします。

let myData = [100, "りんご", true];

このとき、Officeスクリプトは「なんでも入るごちゃまぜの配列(any[] 型、または union型)」だと自動解釈します。

「何でも入るなら便利じゃない?」と思うかもしれませんが、ここに大きな罠があります。Excel VBAの Variant 配列のような感覚でこれを使ってしまうと、後からデータを処理する時に、「数字だと思って足し算しようとしたら、中身が文字("りんご")で計算エラーになった」「文字だと思って文字数を数えようとしたら、中身が数字でエラーになった」というバグが多発します。

Officeスクリプト(TypeScript)の強みは、型をカチッと決めてバグを防ぐことです。特別な理由がない限りは、配列を作る時も let scores: number[]let names: string[] のように「この配列にはこのデータ型しか入れない!」としっかり型宣言をして、別の型を混ぜないようにするのが、安全で綺麗なコードを書くための鉄則ですよ!


【Officeスクリプト入門】文字列を数値に変える!「型変換(Number)」の方法をマスターしよう

OfficeスクリプトでExcelのデータを処理していると、「画面上は数字に見えるのに、プログラムの中では文字列(string)として扱われていて、うまく計算できない…」というトラブルによく遭遇します。

今回は、文字として定義された数字を、計算ができるように正しい「数値型(number)」へ変換する方法(型変換)を分かりやすく解説します!

0. 文法:文字列を数値にするには「Number()」を使う

Officeスクリプトで文字列を数値に変換したいときは、Number(変換したい文字) を使います。

カッコの中に文字としての数字(例: "100")を入れると、計算ができる本物の数値(例: 100)に変換してくれます。

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。文字列として定義した "100" に、型変換を使って 50 を正しく足し算するサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // 文字列型(string)として数字を定義する
  let strPrice: string = "100";
  
  // 【失敗パターン】文字のまま足し算すると...?
  let badResult = strPrice + 50;
  console.log("そのまま足した場合:" + badResult);
  
  // 【成功パターン】Number() で数値型に変換してから足し算する
  let goodResult = Number(strPrice) + 50;
  console.log("型変換して足した場合:" + goodResult);
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。

  そのまま足した場合:10050
  型変換して足した場合:150

そのまま足した方は 10050 という文字がくっついて 10050 になってしまっていますが、Number() を使った方は正しく 150 と計算できていますね!

ワンポイント・アドバイス

Excel実務で「Number()」が絶対に必要な理由
Excelのセルから値を取得する際、セルの書式設定が「文字列」になっていたり、システムからダウンロードしたデータだったりすると、Officeスクリプト側には数値ではなく string(文字列)として取り込まれてしまうことがよくあります。

Officeスクリプト(TypeScript)では、文字の後ろに + 50 のように足し算を書くと、エラーにはならず「文字の結合処理」として扱われてしまうため、計算結果がバグってしまう原因になります。

「セルから持ってきた数字を使って計算や合計を出したい!」という時は、今回紹介した Number(セルの値) を使って、一度しっかり数値型に変換してから計算する癖をつけておくと、予期せぬ計算ミスを防ぐことができますよ!


【Officeスクリプト入門】変数って初期化が必要?値を入れずに宣言するルールを学ぼう

Officeスクリプトで変数を作るとき、いつも let x = 10; のように最初から値を入れていましたが、ふと「これって必ず最初に値を入れないといけないの?」と疑問に思ったことはありませんか?

今回は、変数の「初期化(最初に値を入れること)」のルールと、あとから値を代入する方法について解説します!

0. 文法:初期化しない時は「型」をセットで書く

結論から言うと、変数を作るときに必ずしも最初から値(初期値)を入れる必要はありません。 値を入れずに「箱(変数)だけを先に用意する」という宣言も可能です。

ただし、初期値を入れない場合は「型(: number など)」を絶対にセットで書くというルールがあります。

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。まずは「数値が入る箱」だけを用意して、あとからデータを代入するサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // 初期値は入れず、まずは「数値が入る箱(score)」だけを用意する
  let score: number;
  
  // あとから処理の中で値を代入する
  score = 95;
  
  // コンソールに出力する
  console.log("テストの点数:" + score);
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。あとから入れた「95」がしっかり出力されますね!

  テストの点数:95

ワンポイント・アドバイス

なぜ初期値を入れないときは「型」が必要なの?
最初から let score = 95; と書けば、Officeスクリプトは「右側が数字だから、scoreは数値の箱(number型)ね」と自動で判断してくれます。

しかし、中身を空っぽのまま let score; とだけ書いてしまうと、Officeスクリプトは「えっ、これから数字を入れるの?文字を入れるの?どっちの箱を用意すればいいの?」と迷ってしまい、エラー(型不明のエラー)になってしまいます。そのため、あとから値を入れる場合は必ず let score: number; と教えてあげる必要があるのです。

ちなみに、値を一回も入れないまま(空っぽのまま)console.log(score); のように使おうとすると、エディタが「中身が入っていません!」と事前に赤い波線で怒ってくれます。うっかりミスを未然に防いでくれる便利な仕組みなので、ぜひ覚えておいてくださいね!



【Officeスクリプト入門】型って宣言するの?データ型(型指定)の基本をマスターしよう

前回はデータの入れ物である「変数(let)」について解説しましたが、今回は一歩進んで、Officeスクリプトの最大の特徴である「データ型(型指定)」について解説します!

「型ってわざわざ書かないといけないの?」という疑問を、実際の書き方とメリットを交えてスッキリ解消しましょう。

0. 文法:型は「コロン(:)」のあとに書く

Officeスクリプトで型をはっきりと宣言したいときは、変数名(または定数名)の後ろに : 型名 をつけます。

代表的な型には、以下のようなものがあります。

  • number:数値(整数や小数)
  • string:文字列(文字のデータ)
  • boolean:論理値(true または false)

1. 実践サンプル

それでは、エディタに以下のコードを貼り付けて動かしてみましょう。型をきっちり指定して変数を宣言するサンプルです。

function main(workbook: ExcelScript.Workbook) {
  // ① 数値型(number)を明示して宣言
  let age: number = 20;
  
  // ② 文字列型(string)を明示して宣言
  let message: string = "こんにちは!";
  
  // コンソールに出力する
  console.log(message + "年齢は" + age + "歳です");
}

2. 実行結果

スクリプトエディタの右上にある実行ボタン(よこむきさんかく ▶)を押すと、画面下部の「出力」タブに以下のように表示されます。

  こんにちは!年齢は20歳です

ワンポイント・アドバイス

Q. 型は「絶対に」書かないとダメなの?
結論から言うと、初期値をいきなり入れる場合は書かなくても大丈夫です!

例えば、let age = 20; とだけ書いた場合、Officeスクリプトが自動的に「右側が20(数字)だから、この変数は number 型だな!」と判断してくれます(これを型推論といいます)。そのため、最初のうちは型を省略して書いても問題なく動きます。

Q. じゃあ、なんでわざわざ型を書くの?
型をはっきり書いておく(型指定する)最大のメリットは、「未来の自分やチームのうっかりミスを、エディタがその場で怒ってくれるから」です。

もし、let age: number = 20; と書いたあとに、間違えて age = "二十歳"; のように文字を入れようとすると、実行する前にエディタが「数値の箱に文字を入れないでください!」と赤い波線でエラーを出して教えてくれます。VBAだと実行してエラーになるまで気づきにくいバグを、書いたその瞬間に防いでくれるのが型を宣言する強みなんですよ!